【问题标题】:Sometimes NSArrayController is not refreshing NSTableView after core data delete/update有时 NSArrayController 在核心数据删除/更新后不刷新 NSTableView
【发布时间】:2019-06-19 23:30:21
【问题描述】:

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

Prepares contentsEditable 在 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
   }];

谁能帮帮我?

【问题讨论】:

  • 当你说“托管对象”是指NSManagedObjectContext?对象是否从主上下文中移除?
  • @Willeke 是的,更新的问题。
  • 对象没有从主上下文中移除吗?还是对象从主上下文中移除,而不是从数组控制器中移除?
  • @Willeke 对象已从主上下文中删除,但未从数组控制器中删除。
  • 目前我添加了一个快速修复,从上下文中删除对象后,我正在检查 arrayController.arrangedObjects 中是否存在对象,如果存在,我将使用 [arrayController removeObject:entryToRemove] 删除它。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多