【发布时间】:2012-11-16 08:51:00
【问题描述】:
一个简单的猜测是因为当我们最近添加了我们不知道或没有特定信息的对象来创建永久 ID。
很好。
然后我读到这个: 获得PermanentIDsForObjects:错误:
将给定数组中对象的对象 ID 转换为永久 ID。 - (BOOL)obtainPermanentIDsForObjects:(NSArray )objects 错误:(NSError *)error
该方法将objects中每个被管理对象的object ID转换为一个永久的ID。尽管该对象将具有永久 ID,但它仍会积极响应 isInserted 直到它被保存。任何已有永久 ID 的对象都会被忽略。
任何尚未分配给存储的对象都根据 Core Data 在保存操作期间用于分配的相同规则进行分配(第一个支持实体的可写存储,并且适用于实例及其相关项)。 特别注意事项
好的,所以在我们保存 NSManagedObject 之前我们得到了临时 ID。不过
保存 managedObjectContext 不会更新 NSManagedObjects 的 ID。它与此代码显示的相同:
PO([Catalogs convertEachElementToAnother:(id)^(id element) {
BGCatalogData * data = (BGCatalogData*) element;
NSManagedObjectID * theObjectID= data.objectID;
return theObjectID;
}]);
NSError * error;
BOOL saveSuccesfully = [[BGMDCRManagedObjectContextThreadHandler managedObjectContext] save:&error];
PO([Catalogs convertEachElementToAnother:(id)^(id element){
BGCatalogData * data = (BGCatalogData*) element;
NSManagedObjectID * theObjectID= data.objectID;
return theObjectID;
}]);'
mod注意:我无法将上面的代码转换成代码
结果:
[Catalogs convertEachElementToAnother:(id)^(id element){ BGCatalogData * data = (BGCatalogData*) element; NSManagedObjectID * theObjectID= data.objectID; return theObjectID; }]: (
"0x888a340 <x-coredata:///BGCatalogData/t084E0F43-A129-4023-8190-2962D8D0930A603>",
"0x888d670 <x-coredata:///BGCatalogData/t084E0F43-A129-4023-8190-2962D8D0930A609>",
"0x888ed50 <x-coredata:///BGCatalogData/t084E0F43-A129-4023-8190-2962D8D0930A615>",
"0x888f690 <x-coredata:///BGCatalogData/t084E0F43-A129-4023-8190-2962D8D0930A621>"
)
2012-11-16 15:33:28.489 BadgerNew[26871:1d03] [Catalogs convertEachElementToAnother:(id)^(id element){ BGCatalogData * data = (BGCatalogData*) element; NSManagedObjectID * theObjectID= data.objectID; return theObjectID; }]: (
"0x888a340 <x-coredata:///BGCatalogData/t084E0F43-A129-4023-8190-2962D8D0930A603>",
"0x888d670 <x-coredata:///BGCatalogData/t084E0F43-A129-4023-8190-2962D8D0930A609>",
"0x888ed50 <x-coredata:///BGCatalogData/t084E0F43-A129-4023-8190-2962D8D0930A615>",
"0x888f690 <x-coredata:///BGCatalogData/t084E0F43-A129-4023-8190-2962D8D0930A621>"
)
我们可以通过在对象被保存之前调用getPermanentIDsForObjects来给对象永久ID。
那么,为什么 IOS 还要等到保存才能提供永久 ID?为什么不马上呢?
【问题讨论】:
标签: objective-c xcode4.5