新的Core Data对象未显示在NSArrayController的arrangeObjects中

时间:2010-12-27 12:41:01

标签: cocoa core-data cocoa-bindings

当我在Core Data托管对象上下文中插入一个新对象时,不久之后尝试在NSArrayController中找到这个新对象(通过绑定与managedObjectContext连接),我找不到它。我用一种方法进行创作和搜索。

我现在的问题。在NSArrayControllers arrangeObject数组中显示新插入对象需要多长时间?

更新 这是插入和获取新对象的代码

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

2 个答案:

答案 0 :(得分:3)

这不是“多长时间”而是“在什么时候”的问题。有足够的区别,研究它很重要。 : - )

通常阵列控制器会在下一个运行循环中自动更新(在这种情况下重新获取其内容),但在技术上“在某个未来的运行循环中”。如果您希望在插入内容后立即更新,请将您的MOC发送-processPendingChanges,然后向阵列控制器询问-fetch:

您在Core Data documentation中阅读的第一件事是,它是一个高级Cocoa主题,其先决条件知识包括键值绑定和键值观察。在理解KVC / KVO(以及Cocoa Bindings层)时,可以找到导致这个问题的知识缺失。

答案 1 :(得分:0)

刚刚找到了解决方法。我使用setSelectedObjects:的{​​{1}}方法来选择对象。不知道为什么我还没用过这种方法!