Иногда NSArrayController не обновляет NSTableView после удаления / обновления данных ядра - PullRequest
0 голосов
/ 26 января 2019

Я использую NSArrayController Связывание для заполнения NSTableView из базовых данных. NSArrayController подключен к mainQueueConcurrencyType контексту управляемого объекта (основного управляемого объекта). Родитель основного контекста управляемого объекта - privateQueueConcurrencyType (фоновый контекст управляемого объекта). Вызов сохранения в главном контексте управляемого объекта приведет к внесению изменений в фоновый контекст управляемого объекта, а сохранение в фоновом контексте управляемого объекта сохранит в постоянном хранилище.

Prepares contents и Editable включены в xib для NSArrayController

Таблица основных данных:
Путь
Дата
Статус

У меня есть уникальные ограничения, добавленные к пути.

Иногда NSArrayController не удаляет удаленный объект из упорядоченного объекта после сохранения основных данных.

  [context performBlock:^{
        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        NSEntityDescription *entity = [NSEntityDescription entityForName:@"entity" inManagedObjectContext:context];
        [fetchRequest setEntity:entity];
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"path ==%@", path];
        [fetchRequest setPredicate:predicate];

        NSError *error = nil;
        NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
        SyncStatusEntry *syncStatus = [fetchedObjects firstObject];
        NSInteger status = syncStatus.status.integerValue;
        context deleteObject:syncStatus];
        [context save:nil];
        // Sometimes NSArrayController still have this object
   }];

Может кто-нибудь помочь мне?

1 Ответ

0 голосов
/ 01 февраля 2019

Видимо NSArrayController уведомляется, когда что-то меняется в контексте. Это уведомление отправляется в mergeChangesFromContextDidSaveNotification:, который автоматически вызывается, если automaticallyMergesChangesFromParent равен YES.

...