如何正确使用ManagedObjectID?

时间:2010-06-10 09:46:21

标签: iphone core-data

我正在尝试的是:

1)创建一个新的manged对象

2)使用[myMO objectID];

获取临时ID

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

NSManagedObjectID *moID = [myMO objectID];
NSURL *url = [moID URIRepresentation];

4)保存托管对象上下文

5)一段时间后,使用NSURL作为ID

获取该对象
NSManagedObjectID *moID = [[context persistentStoreCoordinator] managedObjectIDForURIRepresentation:url];

猜猜:它不起作用。我从

返回一个空愚蠢的对象
NSManagedObject *myOldMo = [context existingObjectWithID: moID error:&error];

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

这是要走的路?

1)创建托管对象

2)保存上下文

3)获取ID为NSURL

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

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

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

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

1 个答案:

答案 0 :(得分:11)

我不确定这是一个如此大的秘密。该文档描述了从NSManagedObjectContext

获取托管对象的永久ID的方法
- (BOOL)obtainPermanentIDsForObjects:(NSArray *)objects error:(NSError **)error

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