iphone - 如何为 NSManagedObject 子类编写自定义访问器?

标签 iphone objective-c ios core-data

我有一个名为 Cart 的 View 。它显示一个 Item 表。这些Item需要持久化,所以Item子类NSManagedObject; idprice 等值是访问器为 @dynamic 的属性,因此它们是自动生成的。

我有另一个名为 Favorites 的 View 。它显示一个 Item 表,但它们不需要持久化。事实上,只要用户使用不同的凭据登录,此 View 就会发生变化。

这两个 View 之间的联系是用户可以从他的收藏夹中将项目添加到他的购物车。购物车可以存储来自不同Favorites 列表的Item。当商品添加到购物车时,收藏夹 列表不会改变。

最初,我将 Favorites View 的模型设为 NSDictionary 对象的 NSArray。当用户将商品添加到他的购物车时,我从 NSDictionary 键值对创建商品并将其保存在核心数据中。这种方法看起来不是很干净或很干燥。将 Favorites View 的模型设为 Item 的 NSArray 不是更有意义吗?

所以现在我的意图是实现 Item 类,以便它代表核心数据模型 (NSManagedObject),但也可以使用 Favorites View 。作为 Objective-C 和 iOS 开发的新手,我真的不知道这将如何工作或看起来像什么。似乎我需要重写为我神奇创建的访问器,但我不能在编译时使用 super 调用调用它们...任何人都可以给我一个粗略的概述它会知道返回 NSDictionary 数据还是 Core Data 数据?如果它是 Core Data 数据,我如何保持与神奇生成的访问器相同的效率水平?

更好的是,有没有更好的实现,就像 DRY 或更有意义?还是我试图将太多的功能组合到一个类中?在这种情况下,NSDictionary 对象的 NSArray 是最好的方法吗?

最佳答案

您可以在提取请求中指定结果类型(对象、objectID、计数、字典)。

此外,我不会在 MOC 之外使用 NSManagedObjects。您应该有一个单独的对象用于存储内存,或者您可以为这些对象使用内存中的持久存储......或者,您可以创建一个单独的 MOC 作为您使用的主数据库 MOC 的子级用于内存中的对象。

这些方法的优点是您的代码不必知道它们是否已备份到磁盘。

只要您不保存 MOC,对这些对象所做的更改就永远不会写入磁盘。

编辑

NSFetchRequest *fetchRequest = // create the fetch request...
fetchRequest.resultType = NSDictionaryResultType;

现在,当您进行获取时,您将返回一个 NSDictionary 数组,而不是返回一个 NSManagedObject 数组。

关于iphone - 如何为 NSManagedObject 子类编写自定义访问器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10526723/

相关文章:

objective-c - 无法将 objc block 转换为 swift

ios - 使用 block 的 Sprite-kit Action

ios - ios中nsurlconnection中的post方法

ios - RestKit 映射没有键路径的字符串数组

ios - 同一个 UIView 中的多个 UIPickerView

ios - 了解将数据从第二个 View Controller 传回主视图 Controller 时的机制

iPhone 应用程序 - Google plus share with pre-fill text

iphone - 如何在 iPhone 中以高质量调整图像大小

iphone - 没有 Storyboard或 xib 文件的 iOS 通用应用程序

iphone - UISplitViewController 模板不能包含 Group'd UITableView