可可 – NSManagedObject作为NSDictionary键?

可可 – NSManagedObject作为NSDictionary键?,第1张

概述在我的应用程序中,我有一个NSDictionary,其键应该是NSManagedObject子类的实例。 然而,问题是NSManagedObject不实现NSCopying协议,这意味着即使 – [hash]方法可以正常工作,NSManagedObject的Core Data对象/实例也不能用作字典密钥。 我该怎么办? 有四个选项: >使用不同的对象作为字典键,然后从中查找。 [object ob 在我的应用程序中,我有一个NSDictionary,其键应该是NSManagedobject子类的实例。

然而,问题是NSManagedobject不实现NScopying协议,这意味着即使 – [hash]方法可以正常工作,NSManagedobject的Core Data对象/实例也不能用作字典密钥。

我该怎么办?

解决方法 有四个选项:

>使用不同的对象作为字典键,然后从中查找。 [object objectID]或[NSValue valueWithNonretainedobject:]似乎是最明显的
>使用CFDictionaryCreateMutable()创建具有保留的键而不是复制的字典,然后调用CFDictionarySetValue()来存储对象
>在OS X或iOS6上,[NSMaptable maptableWithStrongToStrongObjects]给你一个纯Objective-C等价于cfmutabledictionary
>为您的托管对象子类实现NScopying,使其返回自身(如果您没有使用ARC,则会带有一个凸起的引用计数)

笔记

 valueWithNonretainedobject:很危险,因为可能留下悬挂指针;最好避免。

存储对象ID是很好的,除了新对象使用临时ID开始使用的事实。当上下文保存到磁盘(或-obtainPermanentIDsForObjects:…被调用)时,该ID将更改为永久的ID。您的映射代码需要足够聪明才能处理这一点,除非可以保证所有传入对象都具有永久ID。

像这样执行NScopying感觉有点狡猾,但应该工作正常。正因为如此,这正是NSURLSessionTask采取的方法,我认为字典友善。

在OS X 10.8 Mountain lion之前,以前可以创建一个常规的NSMutableDictionary,然后调用CFDictionarySetValue()。不过情况已经不复存在了现在,新的字典具有在CF级别指定的适当的复制回调,而不是纯粹是NSMutableDictionary的一个功能。

总结

以上是内存溢出为你收集整理的可可 – NSManagedObject作为NSDictionary键?全部内容,希望文章能够帮你解决可可 – NSManagedObject作为NSDictionary键?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1038081.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存