0

DBに追加しようとしunique valuesています。sqlite

に一意の属性を作成しようとしました.xcdatamodeldが、成功しませんでした。

コードのこの部分は、すべてterminaisonを Table に追加しF016Terminaisonます。のみを追加するにはどうすればよいunique terminaison valuesですか?

for (NSString *terminaison in [[verbe objectForKey:temps] objectForKey:@"terminaison"])
{
    F016Terminaison *newTerminaison = [NSEntityDescription insertNewObjectForEntityForName:@"F016Terminaison" inManagedObjectContext:self.managedObjectContext];
    newTerminaison.name = terminaison;               
}
4

2 に答える 2

1

を呼び出すたびにinsertNewObjectForEntityForName、新しいオブジェクトが作成され、管理対象オブジェクト コンテキストに挿入されます。

一意の値のみが必要な場合は、その値を持つオブジェクトが既に存在するかどうかを最初に確認する必要があります。それはNSFetchRequest次のような述語で行われます

[NSPredicate predicateWithFormat:@"name == %@", terminaison];

多くの値を挿入する必要がある場合は、多くのフェッチ リクエストを行うよりも、最初に新しいリストから値を持つすべてのオブジェクトをフェッチする方が効果的です。

「Core Data Programming Guide」の「Implementing Find-or-Create Efficiently」と比較してください。

于 2013-07-15T16:39:44.447 に答える
1

オブジェクトの既存のインスタンスを見つけるためにフェッチを実行し、存在しない場合は追加する必要があります。

例えば:

// assumes your object has a "uniqueAttribute" and you supply a uniqueValue to test
NSPredicate * predicate = [NSPredicate predicateWithFormat:@"uniqueAttribute == %@", uniqueValue];
NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setPredicate:predicate];
[fetchRequest setFetchLimit:1];
NSError * error = nil;
NSArray * results = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
if ([results count] == 1) {
    id existingObject = [results objectAtIndex:0];
    // do something with existing object
}
else if (results) {
    // create a new object
}
else {
    NSLog(@"executeFetchRequest returned error: %@ (userInfo: %@)", [error localizedDescription], [error userInfo]);
}
于 2013-07-15T16:40:07.823 に答える