【发布时间】:2019-06-19 23:30:21
【问题描述】:
我正在使用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
}];
谁能帮帮我?
【问题讨论】:
-
当你说“托管对象”是指
NSManagedObjectContext?对象是否从主上下文中移除? -
@Willeke 是的,更新的问题。
-
对象没有从主上下文中移除吗?还是对象从主上下文中移除,而不是从数组控制器中移除?
-
@Willeke 对象已从主上下文中删除,但未从数组控制器中删除。
-
目前我添加了一个快速修复,从上下文中删除对象后,我正在检查 arrayController.arrangedObjects 中是否存在对象,如果存在,我将使用 [arrayController removeObject:entryToRemove] 删除它。
标签: objective-c cocoa core-data nstableview nsarraycontroller