Исключение делегата NSFetchedResultsController

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

Данные извлекаются, анализируются и вставляются/обновляются в мои основные данные.

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

Я буквально схожу с ума. Кажется, у этого парня похожая проблема, но я все еще не могу исправить свою с помощью его решения: Ошибка CoreData сводит меня с ума... CoreData :Серьезная ошибка приложения. Исключение, перехваченное делегатом NSFetchedResultsController

. Вот полная ошибка:

2012-07-31 14:14:47.332 MyApp[2893:11303] 
*** Assertion failure in -[_UITableViewUpdateSupport _setupAnimationsForNewlyInsertedCells], 
/SourceCache/UIKit_Sim/UIKit-1914.84/UITableViewSupport.m:1133
2012-07-31 14:14:47.332 MyApp[2893:11303] CoreData: error: Serious application error.  
An exception was caught from the delegate of NSFetchedResultsController during a call to -
controllerDidChangeContent:.  
Attempt to create two animations for cell with userInfo (null)

ОБНОВЛЕНИЕ:

У меня есть предикат для моего запроса на выборку. Чтобы казалось, что удаляются объекты, ранее загруженные из API и отсутствующие в новом результате JSON. Я устанавливаю флаг hideFromUser,это сохраняется в моих основных данных.

Если этот флаг установлен в YES, он не отображается в табличном представлении. Но если это нормально, то это так. Я также обновляю информацию об этом управляемом объекте, если что-то изменится. Возможно ли, что у меня есть объект, который ранее был настроен на скрытие... и теперь настроен на отображение, и у него также были некоторые новые данные, может ли это вызвать «обновление ячейки» и «ячейка должна вставить»?

Чем больше я думаю об этом, тем меньше это кажется актуальным.

Вот как я обновляю свои данные:

1 )Я установил для всех соответствующих объектов соответствующего типа значение «скрыть пользователя формы» (NSPredicate гарантирует, что они не будут отображаться в табличном представлении ).

2 )Я получаю NSArray из данных JSON.

3 )Зацикливая каждый элемент, мой метод createABookOfClass :withJSON :запрашивает основные данные для книги (, используя идентификатор из словаря json ), если он не находит его, он создает новый. Обратите внимание :в этот момент «скрыть от пользователя флаг» возвращается.

4 )Когда все сделано, я сохраняю.

[[DPLocalStore getInstance] hideFlagItemsOfType:NSStringFromClass([MyFavouriteBook class])];

NSArray * itemsJSON = [data mutableObjectFromJSONData];

[itemsJSON enumerateObjectsUsingBlock:^(NSDictionary *obj, NSUInteger idx, BOOL *stop) {     
    [[DPLocalStore getInstance] createABookOfClass:[MyFavouriteBook class]
                                          withJSON:obj];
}];

NSError *error = nil;
BOOL didsave = [[DPLocalStore getInstance] save:&error];

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

5
задан Community 23 May 2017 в 10:34
поделиться