Core Dataを使用していて、auto_increment IDを一意になるフィールドの1つとして設定したいと考えています。コアデータを使用してiOSでauto_incrementを設定することは可能ですか?誰かがこれを実装する方法の小さな例を手伝ってくれる?
以下は、データベースにレコードを挿入するためのコードです。最初のフィールド「id」で、auto_incrementとして設定し、手動で挿入したくありません。
- (NSManagedObjectContext *)managedObjectContext {
NSManagedObjectContext *context = nil;
id delegate = [[UIApplication sharedApplication] delegate];
if ([delegate performSelector:@selector(managedObjectContext)]) {
context = [delegate managedObjectContext];
}
return context;
}
NSManagedObjectContext *context = [self managedObjectContext];
// Create a new managed object
NSManagedObject *newObj = [NSEntityDescription insertNewObjectForEntityForName:@"Users" inManagedObjectContext:context];
[newObj setValue:[NSNumber numberWithInt:userId] forKey:@"id"];
[newObj setValue:theFileName forKey:@"Name"];
Core Dataには自動インクリメント機能はありません。内部でSQLiteを使用しているという事実はほとんど関係ありません。SQLのような詳細に焦点を合わせると、コアデータがひどく間違ったものになります。
増分フィールドが必要な場合は、自分で管理する必要があります。現在の値をアプリのNSUserDefaults
に保存できます。または、Core Dataが使用する永続ストアファイルのメタデータにそれを配置することもできます(NSPersistentStoreCoordinator
のメソッドを参照)。どちらでもかまいません。新しいオブジェクトを作成するときは、必ず調べてインクリメントし、再度保存してください。
しかし、おそらくこのフィールドは必要ありません。 Core Dataは、各管理対象オブジェクトの一意のIDをすでに処理しています。NSManagedObjectID
を参照してください。