简体   繁体   English

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

[英]Sometimes NSArrayController is not refreshing NSTableView after core data delete/update

I am using NSArrayController Binding to populate NSTableView from core data. 我正在使用NSArrayController Binding从核心数据填充NSTableView NSArrayController is connected to mainQueueConcurrencyType managed object context(main managed object). NSArrayController连接到mainQueueConcurrencyType管对象上下文(主受管对象)。 parent of main managed object context is privateQueueConcurrencyType (background managed object context). 主管理对象上下文的父级是privateQueueConcurrencyType (后台管理对象上下文)。 Save call on main managed object context will push changes to background managed object context and save on background managed object context will save to persistent store. 在主管理对象上下文上的Save调用会将更改推送到后台管理对象上下文,而在后台管理对象上下文上保存将保存到持久性存储。

Prepares contents and Editable are enabled in xib for NSArrayController 在xib中为NSArrayController启用了Prepares contentsEditable

Core data table : 核心数据表:
Path 路径
Date 日期
Status 状态

I have unique constraints added to path. 我对路径添加了独特的约束。

Sometimes NSArrayController is not removing deleted object from arranged object after core data save. 有时,保存核心数据后, 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
   }];

Can anyone please help me out? 有人可以帮我吗?

Apparently NSArrayController is notified when something changes in the context. 显然,上下文中发生某些更改时会通知NSArrayController This notification is sent in mergeChangesFromContextDidSaveNotification: which is automatically called if automaticallyMergesChangesFromParent is YES . 该通知以mergeChangesFromContextDidSaveNotification:发送,如果automaticallyMergesChangesFromParentYES ,则会自动调用该通知。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM