2009-08-28 22 views
0

CoreDataのドキュメントには、「新しく挿入されたオブジェクトに定義して設定できる固有のID(UUID)プロパティを作成することで、時には恩恵を受けることができます。保存操作の前に新しいオブジェクトは元のコンテキストでしか見つかりません)。 "CoreDataのカスタムUIDデータタイプ

このタイプには何を使用する必要がありますか?

管理対象オブジェクトのobjectIDは通常「NSManagedObjectID」型ですが、XCode経由で指定した属性の型を設定できるDataModelウィザードツールは、「未定義」、バイナリデータ以外に基本的な許容型のみを持ちます& Transformable 。

(オブジェクトの標準ObjectIDに加えて)オブジェクトのセカンダリIDとして機能する属性を使用したい場合は、NSStringとして保存するか、カスタムモデルを変更してNSManagedObjectIDを保持しますか? (iPhoneアプリ/ CoreData開発のための)

答えて

1

アンNSStringのまたは整数属性が(もちろん、それが適切にシリアライズされた可能性が)あなたが望んでいたものを保存するために変形属性を使用することができますが、論理的な選択肢です。増分する整数はおそらく多くの用途では十分ですが、それぞれのユースケースは異なります。文字列またはバイト配列のUUIDを生成するための多くのアルゴリズムがネット上に存在します(Googleで始まります)。 NSStringのUUIDは非常に簡単です:バイト配列のための

+(NSString*)UUIDString { 
    CFUUIDRef theUUID = CFUUIDCreate(NULL); 
    CFStringRef string = CFUUIDCreateString(NULL, theUUID); 
    CFRelease(theUUID); 
    return [NSMakeCollectable(string) autorelease]; 
} 

CFUUIDGetUUIDBytes()を見てください。

このルートに進む前に、必要かどうかについて長く考えてください。 SQLの観点から来る人々は、そのIDを「欲しい」が、Core Dataはリレーショナル・データベースではありません。これは、単なるバッキング実装としてSQLiteを使用するオブジェクトグラフ管理フレームワークです。あなたがコアデータでSQLのようなことをしようとしているなら、あなたはフレームワークと戦うつもりです。コアデータフレームワークを適切に使用するには、別のidプロパティが必要になることがよくあります。

+0

最後の行は、GCモードと保持/解放モードの両方で正しいメモリ管理を行うには 'return [NSMakeCollectable(string)autorelease];'にする必要があります。 –