Iphone 如何手动设置NSManagedObjectID?

Iphone 如何手动设置NSManagedObjectID?,iphone,objective-c,core-data,mongodb,nsmanagedobject,Iphone,Objective C,Core Data,Mongodb,Nsmanagedobject,我想将iPhone上的核心数据与Sinatra服务器上的MongoDB同步 当iPhone从Node.js聊天服务器收到消息时,该消息包含发送者的BSON对象ID(字符串)。为了让iPhone存储此消息,我在核心数据中找到了具有相同Id的用户。我希望能够执行类似于objectWithID的操作。换句话说,我希望将NSManagedObjectId设置为与MongoDB BSON ObjectId相同。我要检查的另一件事是,如果managedObjectContext中没有具有发送者id的用户,我

我想将iPhone上的核心数据与Sinatra服务器上的MongoDB同步

当iPhone从Node.js聊天服务器收到消息时,该消息包含发送者的BSON对象ID(字符串)。为了让iPhone存储此消息,我在核心数据中找到了具有相同Id的用户。我希望能够执行类似于
objectWithID
的操作。换句话说,我希望将NSManagedObjectId设置为与MongoDB BSON ObjectId相同。我要检查的另一件事是,如果managedObjectContext中没有具有发送者id的用户,我将从persistentStore中获取他,如果他不在,我将创建他。为了维护消息和发送者之间的关系,这需要做很多工作。也许我应该将Message对象的sender属性作为其BSON对象ID存储为字符串,而不是用户NSManagedObject

你推荐什么?我应该在iPhone上也使用MongoDB吗?我刚刚意识到有一个Objective-C驱动程序。但我刚刚开始掌握核心数据的诀窍,它有一些很酷的东西(比如撤销支持),我可能想使用它们。。。现在,我只是将其用于简单的抓取和持久存储,以便替换它。但我计划在将来实现撤销支持,因为我认为这是很好的可用性。我更喜欢撤销选项,而不是回答确认弹出窗口,例如,我喜欢GMail如何让你撤销发送或撤销删除邮件等

谢谢


Matt

无法手动设置核心数据对象的objectID。您可能需要添加一个名为externalID的属性,或者在其中存储从服务器获得的ID


有关是否使用核心数据的一些想法,请参阅。请注意,作者的建议是在几乎所有情况下都坚持使用核心数据。

这是一篇很棒的文章。我有一个类似的问题需要解决,我坚持使用带有
remoteID
Int32属性的核心数据。性能肯定是一个问题,瓶颈是对键入remoteID的每个项目进行提取,以查看它是否已经在MOC中。大约100次这样的抓取在iPhone3GS上大约需要1秒,但在第一代iPhone上需要5秒。可能的改进是使用谓词中的
一次获取多个项目,并在后台线程中执行。谢谢,是的,我想我将坚持使用核心数据并按照您的建议执行,特别是因为我使用的是
NSFetchedResultsController
,我在问题中忘了提到这一点。