一个简单的猜测是因为我们最近添加了我们不知道的对象或者没有某些信息来创建永久ID。
精细。
然后我读到了这个: obtainPermanentIDsForObjects:错误:
将给定数组中对象的对象ID转换为永久ID。 - (BOOL)obtainPermanentIDsForObjects:(NSArray )对象错误:(NSError * )错误
此方法将对象中每个托管对象的对象ID转换为永久ID。虽然该对象将具有永久ID,但它仍将对isInserted 做出积极响应,直到保存为。任何已拥有永久ID的对象都将被忽略。
任何尚未分配给商店的对象都是根据Core Data在保存操作期间用于分配的相同规则(支持实体的第一个可写商店,并且适用于实例及其相关项)来分配的。 特别注意事项
好的,所以我们得到临时ID,直到我们保存NSManagedObject。然而
保存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>"
)
我们可以通过调用getsPermanentIDsForObjects BEFORE 来保存对象,从而为对象提供永久ID。
那么为什么IOS会等到保存给永久身份证呢?为什么不马上呢?
答案 0 :(得分:0)
因为CoreData必须操纵底层Persistant Store以“阻止”其他对象的permanentID(例如递增计数器)。如果您在保存不必要且速度慢的事情之前不需要永久ID(您可以只使用临时物品而不保存它)