Это проблема tableView или проблема CoreData - PullRequest
1 голос
/ 04 декабря 2009

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

У меня есть иерархия, которая состоит из 3 контроллеров представления, все они связаны отношениями coredata, как это.

TableViewA = отношение = TableViewB = отношение = TableViewC

Я, честно говоря, новичок в основных данных, и я думаю, что моя проблема заключается в контроллере извлеченных результатов. У меня есть одно в TableViewA, а другое в TableViewB, и, как бы глубоко я ни углублялся, консоль всегда ссылается на методы контроллера результатов, извлеченные из TableViewB, после сбоя. Это проблема?

Что конкретно происходит, если я запускаю свое приложение и углубляюсь в иерархию одной записи, назовем ее Record1, я могу удалять вложенные записи в моем сердце. Ушел! нет проблем!

Но когда я возвращаюсь к TableViewA и углубляюсь в другую запись, давайте назовем эту запись Record2 и попытаемся удалить ее подзаписи, сбои моего приложения, при этом консоль ссылается на этот код из TableViewB.

- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller { // The fetch controller is about to start sending change notifications, so prepare the table view for updates. [self.tableView beginUpdates]; }

Когда я вхожу в отладчик, конкретный метод, с которым у него всегда есть проблема:

if (![x.managedObjectContext save:&error]) {

    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}       

Мне кажется, что мне нужно только подтверждение моего идиотизма с CoreData. О, и сколько ManagedObjectContexts я должен иметь в приложении этого типа. Мне сказали, что у меня должны быть отдельные для добавления контента, которые затем должны реинтегрироваться в основной. Это правда? Спасибо!

1 Ответ

0 голосов
/ 04 декабря 2009

Мне кажется, что это проблема, когда вы удаляете подзаписи для Record1, тогда возникает некоторая несогласованность при удалении подзаписей для Record2 - исходный контекст управляемого объекта не сохраняется, или вступает в конфликт, либо например. Я определенно проверю ваше управление объектами Core Data перед вашим кодом табличного представления.

Что касается нескольких контекстов управляемых объектов, обычно у вас есть только дополнительный контекст, когда вы добавляете совершенно новые записи. Типичным шаблоном является добавление новых записей во вторичный контекст, а затем объединение этого контекста с основным контекстом вашего приложения после добавления и сохранения новой записи. Для изменения или удаления просто используйте оригинальный контекст.

Я мог бы быть более определенным в отношении проблемы, с которой вы столкнулись, если бы вы опубликовали результаты регистрации оператора NSLog в своем последнем фрагменте кода. Атрибуты ошибки domain, code и userInfo будут здесь чрезвычайно полезны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...