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

标签 objective-c core-data nsmanagedobjectcontext nsarraycontroller

我在 OS X 应用程序中使用 Core Data,其中有一些 TableView 绑定(bind)到 NSArrayController。我遇到的问题是当我尝试使用数组 Controller 填充工作表中的表格 View 时,我不希望内容保留。

以下是应用程序的挂起方式;

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

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

“添加用户”工作表 - 此工作表显示还不是所选组成员的用户的表格 View 。按工作表上的关闭按钮将所选用户添加到所选组。

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

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

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

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

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

最佳答案

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

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

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

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

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

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

相关文章:

ios - 使用示例核心数据进行单元测试

ios - TableViewCell - 收集 ManagedObject

ios - AFNetworking 3.0 Multipart form data for uploading image 错误

iOS 比较 NSUInteger 和 NSInteger

objective-c - 从 UIImage/CGImage 转换为 Leptonica Pix 结构

ios - mergeChangesFromContextDidSaveNotification 后的 KVO 通知

ios - swift 中自定义 NSManagedObject 类核心数据的问题

iphone - Objective-c 中 iPhone 上的 HTML 实体编码(将 '<' 转换为 '&lt;')

ios - 核心数据 - NSFetchedResultController 按其他表字段对数据进行排序

ios - 解包后,CoreDataStack 中的 ManagedObjectContext 返回 nil