0

単純な推測としては、最近オブジェクトを追加したときに、永久 ID を作成するための特定の情報がわからないか、持っていないことが原因です。

罰金。

それから私はこれを読みました:getPermanentIDsForObjects:error:

指定された配列内のオブジェクトのオブジェクト ID を永続 ID に変換します。- (BOOL)obtainPermanentIDsForObjects:(NSArray )オブジェクト エラー:(NSError * )エラー

このメソッドは、objects 内の各管理対象オブジェクトのオブジェクト 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>"
)

オブジェクトが保存されるに、 obtainPermanentIDsForObjects を呼び出して、オブジェクトに永続的な ID を与えることができます。

では、なぜ IOS は永続的な ID を与えるために保存するまで待つ必要があるのでしょうか? なぜすぐにしないのですか?

4

1 に答える 1