Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 新的核心数据对象没有';不显示在NSArrayController安排的对象中_Cocoa_Core Data_Cocoa Bindings - Fatal编程技术网

Cocoa 新的核心数据对象没有';不显示在NSArrayController安排的对象中

Cocoa 新的核心数据对象没有';不显示在NSArrayController安排的对象中,cocoa,core-data,cocoa-bindings,Cocoa,Core Data,Cocoa Bindings,当我在核心数据管理对象上下文中插入一个新对象,然后不久尝试在NSArrayController(通过绑定与managedObjectContext连接)中查找这个新对象时,我找不到它。我用一种方法创建和搜索 我现在的问题是。新插入的对象在NSArrayController arrangedObject数组中显示需要多长时间 更新: 下面是插入和获取新对象的代码 NSEntityDescription *entity = [[[self managedObjectModel] entitiesBy

当我在核心数据管理对象上下文中插入一个新对象,然后不久尝试在NSArrayController(通过绑定与managedObjectContext连接)中查找这个新对象时,我找不到它。我用一种方法创建和搜索

我现在的问题是。新插入的对象在NSArrayController arrangedObject数组中显示需要多长时间

更新: 下面是插入和获取新对象的代码

NSEntityDescription *entity = [[[self managedObjectModel] entitiesByName] objectForKey:@"EntityName"];
NSManagedObject *object = [[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:[self managedObjectContext]];
...
[[self managedObjectContext] processPendingChanges];

[arrayController fetch:nil];
NSArray* objects = [arrayController arrangedObjects]; //the new object is not present in the array
这不是“多久”的问题,而是“在什么时候”。有足够的区别,因此研究它很重要。:-)

通常,阵列控制器会在下一次运行循环时自动更新(在本例中,会重新获取其内容),但从技术上讲,是“在将来的某个运行循环中”。如果要在插入内容后立即更新,请向MOC发送一个
-processPendingChanges
,然后让阵列控制器
-fetch:


您在中首先看到的是,这是一个高级的Cocoa主题,其先决知识包括键值绑定和键值观察。在理解KVC/KVO(以及Cocoa绑定层)时,您会发现缺少了一点知识来解决这个问题。

刚刚找到了一个解决方案。我使用
NSArrayController
setSelectedObjects:
方法来选择对象。不知道为什么我没有用这个方法

processPendingChanges方法调用无效。我将通读KVC/KVO文档-也许这有助于我理解问题。ThxWell仅“完成”插入(通常不需要,但不会造成伤害)。对-fetch:的调用至关重要。你也这么做了吗?另外,我假设你只有一个主运行中心。如果您正在调用-fetch:那么您可能需要发布您的代码(插入+此强制数组控制器获取)。在我看来很好。阵列控制器上的所有设置是什么?有过滤谓词吗?有一些过滤谓词,但它们对插入的对象没有影响,因为对象“过了一段时间”才会出现。对不起,伙计们,为什么不简单地将对象添加到arrayController?它有-(void)addObject:(id)newObject;方法,该方法无需进一步ado即可完成此操作。然而,有一件事它没有——那就是揭示新的选择。此外,您还可以配置NSArrayController以自动重新排列对象(例如,添加新对象时)。我遇到了一个类似的问题,因为我错过了在NSArrayController上调用-fetch:的要求。我注意到-setSelectedObjects:似乎这样做是一种副作用,但对于皮带和支架,我选择将这两种方法发送给控制器。后者非常有用,因此无论是添加新项还是编辑旧项,所涉及的托管对象的编辑器工作表中的绑定都会起作用,尽管这感觉有点像黑客,可能存在一种更好的方法。“setSelectedObjects”如何帮助或起作用,如果对象还不在arrayController的内容数组中?