如何正确使用ManagedObjectID?

don*_*ile 6 iphone core-data

我正在尝试的是这个:

1)创建一个新的manged对象

2)获取它的临时ID [myMO objectID];

3)将该ID转换为NSURL,因此我可以将其保存以备将来参考:

NSManagedObjectID *moID = [myMO objectID];
NSURL *url = [moID URIRepresentation];
Run Code Online (Sandbox Code Playgroud)

4)保存托管对象上下文

5)一段时间后,使用NSURL作为ID获取该对象

NSManagedObjectID *moID = [[context persistentStoreCoordinator] managedObjectIDForURIRepresentation:url];
Run Code Online (Sandbox Code Playgroud)

并猜测:它不起作用.我从后面得到一个空愚蠢的物体

NSManagedObject *myOldMo = [context existingObjectWithID: moID error:&error];
Run Code Online (Sandbox Code Playgroud)

但是......正如我所说的......创建托管对象时,ID是临时的.因此,为什么这根本不起作用是有道理的.我必须首先保存上下文,然后我得到一个persistet ID.真实的.对?

那是怎么走的?

1)创建托管对象

2)保存上下文

3)获取ID为NSURL

4)任何时候以后,例如在你的下一个生日,使用NSURL访问托管对象;-)

我试着梦想NSManagedObjectID就像一个DB id,我可以写在一些黄色的postIt表上并粘贴在我的显示器中间,所以我在午餐后再回头看它.你知道......至少就像过去我们通过telnet使用数据库并手动执行SQL命令来查询订单信息等等.身份证一直是最重要和最重要的事情.

但Core Data有一些奇怪的NSManagedObjectID事情.

你的秘密策略是什么?您是否真的认识到需要NSManagedObjectID的许多用例?或者那是我以后可以轻易忘记的事情,没有任何痛苦?

ohh*_*rob 11

我不确定这是一个如此大的秘密.该文档描述了从以下方式获取托管对象的永久ID的方法NSManagedObjectContext:

- (BOOL)obtainPermanentIDsForObjects:(NSArray *)objects error:(NSError **)error
Run Code Online (Sandbox Code Playgroud)

http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/CoreDataFramework/Classes/NSManagedObjectContext_Class/NSManagedObjectContext.html#//apple_ref/occ/instm/NSManagedObjectContext/obtainPermanentIDsForObjects:error: