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

时间:2012-05-10 02:20:02

标签: iphone objective-c ios core-data

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

我有另一个名为Favorites的视图。它显示Item s表,但不需要保留。实际上,只要用户使用不同的凭据登录,此视图就会更改。

两个视图之间的连接是用户可以从他的收藏夹中将项目添加到他的购物车。购物车可以存储来自不同Item列表的Favorites个。将商品添加到购物车时,Favorites列表不会更改。

最初,我使Favorites视图的模型成为NSDictionary对象的NSArray。当用户将项目添加到购物车时,我会从NSDictionary键值对中创建并保存Core Data中的项目。这种方法看起来不是很干净或非常干燥。将Favorites视图的模型设为Item s的NSArray会不会更有意义?

所以现在我的目的是实现Item类,以便它代表核心数据模型(NSManagedObject),但也可以使用Favorites视图。作为Objective-C和iOS开发的新手,我真的不知道它是如何工作或看起来像。似乎我需要覆盖为我神奇创建的访问器,但是我无法在编译时使用super调用来调用它们...任何人都可以给我一个大概了解它何时会知道返回NSDictionary数据或核心数据数据?在核心数据数据的情况下,我如何保持与神奇生成的访问者相同的效率水平?

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

1 个答案:

答案 0 :(得分:1)

您可以在获取请求中指定结果类型(object,objectID,count,dictionary)。

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

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

只要您不保存MOC,对这些对象的更改将永远不会进入磁盘。

修改

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

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