我有一个名为Cart
的视图。它显示Item
s的表格。这些Item
需要持久化,因此Item
子类NSManagedObject; id
,price
等值是访问者为@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对象是最好的方法吗?
答案 0 :(得分:1)
您可以在获取请求中指定结果类型(object,objectID,count,dictionary)。
另外,我不会在MOC之外使用NSManagedObjects。您应该有一个单独的对象用于内存,或者您可以为这些对象使用内存持久性存储...或者,您可以创建一个单独的MOC作为您使用的主数据库MOC的子级对于你的内存中的对象。
这些方法的优点是您的代码不必知道它们是否备份到磁盘。
只要您不保存MOC,对这些对象的更改将永远不会进入磁盘。
修改强>
NSFetchRequest *fetchRequest = // create the fetch request...
fetchRequest.resultType = NSDictionaryResultType;
现在,当你进行获取时,你将获得一个NSDictionary数组,而不是返回一个NSDictionary数组。