gpt4 book ai didi

objective-c - 在没有核心数据的情况下使用 NSArrayController

转载 作者:行者123 更新时间:2023-12-04 05:53:41 27 4
gpt4 key购买 nike

我在我的 OS X 应用程序中使用 Core Data,我将一些 TableViews 绑定(bind)到 NSArrayControllers。我遇到的问题是,当我尝试使用数组 Controller 在工作表中填充表格 View 时,我不希望内容持续存在。

这是应用程序如何卡在一起的;

窗口 1 - 在表格 View 中显示用户列表并允许添加和删除用户。内容通过核心数据绑定(bind)持久化。

窗口 2 - 在表格 View 中显示组列表。第二个表格 View 显示属于所选组的用户列表。内容通过核心数据绑定(bind)持久化。 “添加用户”按钮调用用于将用户添加到组的工作表。

添加用户表 - 此表显示尚未成为所选组成员的用户的表格 View 。按工作表上的关闭按钮会将选定的用户添加到选定的组中。

好的,所以我遇到的问题是添加用户表的数组 Controller 。当我调用工作表时,我会遍历所有用户并将任何用户添加到数组 Controller 中,如果它们在组中尚不存在。当我关闭工作表时,我尝试使用 removeObject 清除数组 Controller :但这会导致“无法将此方法与 ModelObjectContect 一起使用”。

为什么我需要 MOC 才能从阵列 Controller 中移除项目?它仅用于显示目的,所以我不需要它持续存在。如果我将阵列 Controller MOC 设置为我的应用程序委托(delegate),它会物理删除用户,这显然是我不想要的。我只想将它们从工作表的表格 View 中删除。

我认为答案可能是创建另一个 MOC 用作便签本,而不是将其绑定(bind)到持久存储,但这只是在使用 removeObject 时给了我一个不同的错误:,类似于“无法删除对象”存在于另一个 MOC 中。”

为什么我可以将对象添加到数组 Controller 但不能删除它们?在您实际上不希望物理删除项目的情况下,您应该访问底层的“内容”,例如[阵列 Controller 内容]?我玩过这个但得到奇怪的显示结果,因为它似乎在玩它背后的阵列 Controller 的内容。如果我这样做,有没有办法告诉阵列 Controller “顺便说一句,我一直在修补你的内容,你可能需要振作起来”?

在我看来,您不应该在没有 Core Data 的情况下使用数组 Controller ,但文档中有许多评论表明它可以在有无核心数据的情况下使用。

最佳答案

是的,您可以使用没有核心数据托管对象上下文的阵列 Controller 。但是当你存储 NSManagedObject它里面的实例,我认为它会在您删除它们时尝试将它们标记为删除。

如果您使用托管对象并且不希望数组 Controller 的内容在删除时被删除,您必须使用 Cocoa 绑定(bind)将数组 Controller 的内容绑定(bind)到另一个对象的属性。

但是有一个更简单的解决方案。我建议您将数组 Controller 的托管对象上下文设置为您的主 MOC,并使用谓词过滤其内容。

[arrayController setPredicate:[NSPredicate predicateWithFormat:@"NONE groups == %@", group]];

因此,无需在阵列 Controller 中添加或删除用户,因为已经在组中的所有用户都将被隐藏。

关于objective-c - 在没有核心数据的情况下使用 NSArrayController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9775383/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com