iOS Core Data вставка / извлечение взаимосвязи "многие-многие"

В моем приложении у меня есть поездка, которая имеет много остановок. Это было указано в файле.xcdatamodeld. Я могу продолжать манипулировать поездками любым способом, каким захочу, и все они работают нормально. Однако у меня возникают проблемы с добавлением множества остановок в каждую поездку. Это, кажется, не сохраняется. Вот следующий код. этот код находится внутри элемента detailViewController для поездки, поэтому по определенной поездке уже щелкнули.

Trip * trip = [self retrieveObjectWithID:_passedObjectId];


    StopOff *newStop = [NSEntityDescription insertNewObjectForEntityForName:@"StopOff" inManagedObjectContext:managedObjectContext];

    [newStop setValue:stopName forKey:@"stopName"];
    [newStop setValue:stopCity forKey:@"stopCity"];
    [newStop setValue:stopDate forKey:@"stopDate"];
    [newStop setValue:stopAddress forKey:@"stopAddress"];
    [newStop setValue:stopState forKey:@"stopState"];
    [newStop setValue:stopTime forKey:@"stopTime"];

    newStop.trip = trip;
    [trip addStopObject:newStop];

    NSLog(@" stop count %i", [trip.stop count]);

Вот что выдает моя консоль в первый раз, когда я нажимаю кнопку, чтобы запустить это: CoreData: annotation: to-many relationship fault "stop" for objectID 0x8bb2810 <x-coredata://4CE70783-4729-46E0-B18B-8E325D1020CC/Trip/p20> fulfilled from database. Got 0 rows 2013-11-24 21:19:43.417 Tracker[30633:70b] stop count 1

Если я продолжаю нажимать на кнопку, количество стопов увеличивается. Если я перезапускаю приложение, счетчик остановок возвращается в исходное состояние и начинается снова, поэтому кажется, что он не сохраняется.

У меня вопрос, как именно я вставляю много остановок, которые соответствуют поездке, и как только они вставляются и сохраняются, как мне идти вперед и получать каждую соответствующую остановку в этой поездке.

Вот код, для которого извлекает каждую поездку просто отлично. а также managedObjectContext обрабатывается в родительском контроллере представления с помощью NSFetchedResultsController, Пожалуйста, дайте мне знать, если вам нужна дополнительная информация

- (Trip*)retrieveObjectWithID:(NSManagedObjectID*)theID
{
    NSError *error = nil;
    Trip *theObject = (Trip*)[self.managedObjectContext existingObjectWithID:theID error:&error];
    if (error)
        NSLog (@"Error retrieving object with ID %@: %@", theID, error);
    return theObject;
}

2 ответа

Решение

Вы не сохраняете свой контекст после применения изменений (новый StopOff объекты).

После добавления StopOff, вызов [managedObjectContext save:&error] и вы сохраните свой новый объект в магазине.

CoreData не сохраняется автоматически и без save: будучи вызванным, вы потеряете все временные изменения, внесенные в контекст.

Кроме того, нет необходимости [trip addStopObject:newStop]; как CoreData заботится об этом как часть обратных отношений.

У вас есть настройка отношения ко многим: вам не нужны оба newStop.trip = trip а также [trip addStopObject:newStop], Я думаю, именно поэтому вы получаете свое предупреждение.

В какой-то момент вам захочется позвонить:

NSError *error = nil;
[managedObjectContext save:&error];
Другие вопросы по тегам