有时在删除/更新核心数据后,NSArrayController不刷新NSTableView

时间:2019-01-26 08:58:32

标签: objective-c cocoa core-data nstableview nsarraycontroller

我正在使用NSArrayController绑定从核心数据填充NSTableViewNSArrayController连接到mainQueueConcurrencyType受管对象上下文(主受管对象)。 主管理对象上下文的父级是privateQueueConcurrencyType(后台管理对象上下文)。在主管理对象上下文上的Save调用会将更改推送到后台管理对象上下文,而在后台管理对象上下文上保存将保存到持久性存储。

在xib中为Prepares contents启用了

EditableNSArrayController

核心数据表:
路径
日期
状态

我对路径添加了唯一的约束。

保存核心数据后,有时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 :(得分:0)

显然,NSArrayController在上下文中发生更改时得到通知。此通知以mergeChangesFromContextDidSaveNotification:发送,如果automaticallyMergesChangesFromParentYES,则会自动调用该通知。