【问题标题】:New Core Data object doesn't show up in NSArrayController arrangedObjects新的核心数据对象没有出现在 NSArrayController 的排列对象中
【发布时间】:2010-12-27 12:41:01
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: cocoa core-data cocoa-bindings


    【解决方案1】:

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

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

    您在Core Data documentation 中读到的第一件事是它是一个高级 Cocoa 主题,其必备知识包括键值绑定和键值观察。在对 KVC/KVO(和 Cocoa 绑定层)的理解中发现了导致您提出这个问题的缺失知识。

    【讨论】:

    • processPendingChanges 方法调用不起作用。我将通读 KVC/KVO 文档 - 也许这有助于我理解问题。谢谢
    • 好吧,这只会“完成”插入(通常没有必要但不会造成伤害)。调用 -fetch: 很关键。你也这样做了吗?另外,我假设您只有一个 MOC。如果你正在调用 -fetch: 那么你可能需要发布你的代码(插入 + 这个强制数组控制器获取)。
    • 对我来说看起来不错。您的阵列控制器上的所有设置是什么?任何过滤谓词?
    • 有一些过滤谓词,但它们对插入的对象没有影响,因为对象“在一段时间后”出现。
    • 对不起,为什么要避免简单地将对象添加到 arrayController?它有 -(void) addObject:(id)newObject;方法,不用多说就行了。但是,它没有做的一件事是揭示新的选择。您还可以配置 NSArrayController 以自动重新排列对象(例如,当添加新对象时)
    【解决方案2】:

    刚刚找到了解决此问题的方法。我使用NSArrayControllersetSelectedObjects: 方法来选择对象。不知道为什么我没有使用这个方法!

    【讨论】:

    • 我遇到了类似的问题,因为我错过了在 NSArrayController 上调用 -fetch: 的要求。我注意到 -setSelectedObjects: 似乎这样做是一种副作用,但对于腰带和大括号,我选择将这两种方法都发送到控制器。后者很有用,因此无论是添加新项目还是编辑旧项目,相关托管对象的编辑器表中的绑定都可以工作,尽管感觉这有点像黑客和更好的方法可能存在。
    • 如果对象尚未在 arrayController? 的内容数组中,“setSelectedObjects”如何提供帮助或工作?
    猜你喜欢
    • 2016-09-26
    • 1970-01-01
    • 2022-01-25
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 2011-07-24
    • 2012-12-17
    相关资源
    最近更新 更多