发布
社区首页 >问答首页 >按属性的CoreData唯一对象

按属性的CoreData唯一对象
EN

Stack Overflow用户
提问于 2010-02-13 00:36:09
回答 4查看 2.2K关注 0票数 3

我有一个带有一种对象的图,叫做Message。一条消息可以有childs,因此该图是一棵树。图中的每个对象都包含一个属性值;这是一种UUID (全局唯一),因此存储不能包含具有相同UUID的多个消息(此uuid是从消息数据中提取的字符串,因此不能使用nsmanagedobject的objectID替换它)。当我需要验证对象插入到存储中时,问题就出现了。如何检查存储中是否已存在具有相同UUID的邮件?我正在考虑validateForInsert: event上的fetch请求,但当有很多对象需要插入时,它似乎太慢/太复杂(在我的例子中大约是30k )。谁有最好的解决方案?

EN

回答 4

Stack Overflow用户

发布于 2010-02-13 01:32:00

这是CoreData的一个众所周知的限制(我自己也提交了一个特性请求)。你也应该去http://bugreport.apple.com,让他们知道你想要这个功能。(原始bug id为rdar://3711805)

我过去解决这个问题的方法是使用一种方便的方法来访问和创建我的NSManagedObjects。这个方便的方法然后在静态NSMutableDictionary中查找,看看是否已经创建了具有相同唯一属性的另一个对象(唯一属性是键,managedObjectID是值)。如果它找到了一个对象,它只返回该对象。如果没有,它就会创建一个,并将该对象的ID缓存到静态字典中以备将来使用。当应用程序第一次启动时,我必须用预先存在的对象的属性/标识符预先填充这个字典。

我知道这很痛苦。:(提交增强请求。

票数 4
EN

Stack Overflow用户

发布于 2010-02-13 02:12:52

好的,第二个索引的结果更好,所以我试着对问题和解决方案做一个总结。如果有人有更好的想法,我很乐意谈论它:)我从网络上获取了大约30,000条消息,我需要以树的形式将所有消息保存到核心数据存储中。每条消息都包含唯一的标识字符串,并且不能有多条消息以相同的id保存在数据库中。CoreData目前还不支持属性的唯一性,我也不能使用objectID属性来确保这种情况。第一个解决方案是,在伪代码中:-执行一个查询以查看uuid字符串是否存在于存储中-如果它不存在,我可以用该uuid创建一个新的NSManagedObject并将其放入存储中,否则我将忽略它(它已经在数据库中)-执行另一个查询来查找这个新消息的直接父消息,如果找到,我将链接这两个消息,如果没有,它是根消息

这个解决方案有一个很大的问题。对于30k的消息,我需要30k的查询来检查coredata上是否存在新的消息,另外30k来检查父对象(另外,我想,还有30k来插入新的对象)。Over 60k+查询需要很长时间(这里是一分钟或更多)。

我的第二个解决方案是创建第二个辅助NSMutableDictionary,我将在其中将message uuid保存为键,并将NSManagedObjectID的URI rapresentation (唯一可以保存为NSData的)保存为字典条目的值。伪代码的结果是:-在我的辅助字典中使用objectForKey:uuid来查看消息是否存在于coredata中-如果存在,我将忽略它。如果没有,我将把它放入存储中-在我的辅助字典中使用objectForKey:parentuuid,以查看消息的父对象是否存在于coredata中。如果是,我将使用NSPersistentCoordinator的managedObjectIDForURIRepresentation:来获取NSManagedObject (消息的父对象),并将父对象和子对象链接起来

使用这个解决方案,整个过程大约需要5秒完成(结果字典大约是2mb)。

票数 0
EN

Stack Overflow用户

发布于 2010-02-14 07:40:48

我已经上传了一个包含两种技术的示例项目。使用coredata+indexed属性保存大约需要4分钟(怎么了?!!)如果使用辅助索引,则需要大约3秒才能保存。请随时发表评论。这非常奇怪,特别是在我读过之后:http://cocoawithlove.com/2008/03/testing-core-data-with-very-big.html这是我的代码项目:http://dl.dropbox.com/u/103260/CoreDataTreeTest2.zip

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2253378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档