web-dev-qa-db-ja.com

コアデータiOSで自動インクリメントを設定する

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"];
20
Anu Padhye

Core Dataには自動インクリメント機能はありません。内部でSQLiteを使用しているという事実はほとんど関係ありません。SQLのような詳細に焦点を合わせると、コアデータがひどく間違ったものになります。

増分フィールドが必要な場合は、自分で管理する必要があります。現在の値をアプリのNSUserDefaultsに保存できます。または、Core Dataが使用する永続ストアファイルのメタデータにそれを配置することもできます(NSPersistentStoreCoordinatorのメソッドを参照)。どちらでもかまいません。新しいオブジェクトを作成するときは、必ず調べてインクリメントし、再度保存してください。

しかし、おそらくこのフィールドは必要ありません。 Core Dataは、各管理対象オブジェクトの一意のIDをすでに処理しています。NSManagedObjectIDを参照してください。

28
Tom Harrington