私のCoreDataオブジェクトには、name属性があります。文字列だけです。同一の「名前」属性を持つ2つのオブジェクトを保存するユーザーを停止するためにチェックできる自動化メソッドまたはボックスはありますか?または、これを手動でチェックするだけですか?CoreDataに重複している名前はありますか?
ありがとうございました。
私のCoreDataオブジェクトには、name属性があります。文字列だけです。同一の「名前」属性を持つ2つのオブジェクトを保存するユーザーを停止するためにチェックできる自動化メソッドまたはボックスはありますか?または、これを手動でチェックするだけですか?CoreDataに重複している名前はありますか?
ありがとうございました。
使用key value validation(KVV)このようなコードの何かを試してみてください。エンティティのクラスに-validateName:error:
メソッドを追加します。この方法では、同じ名前のオブジェクトのフェッチを実行できます。見つかった場合は、入力した名前がデータストア内で一意ではないため、エラーを返します。
残念ながら、Coreデータの重複データを防ぐためのチェックボックスや自動化システムはありません。だからあなたはそれだけで世話をしなければなりません。
name
が既に存在するかどうかを検索するには、とfetchedResultsController
を組み合わせて使用する必要があります。入力したname
が既に存在する場合は、fetchedResultsController.fetchedObjects
の数が0より大きくなるため、重複した入力を許可しません。重複したエントリが見つからない場合fetchedResultsController.fetchedObjects
は<ですので、入力を許可します。
- (IBAction)saveName
{
NSLog(@"saveArtistInformation");
NSError *error = nil;
// We use an NSPredicate combined with the fetchedResultsController to perform the search
if (self.nameText.text !=nil)
{
NSPredicate *predicate =[NSPredicate predicateWithFormat:@"name contains[cd] %@", self.nameText.text];
[fetchedResultsController.fetchRequest setPredicate:predicate];
}
if (![[self fetchedResultsController] performFetch:&error])
{
// Handle error
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
exit(-1); // Fail
}
// compare `fetchedResultsController`'s count if its <1 allow insertion
if ([fetchedResultsController.fetchedObjects count] < 1)
{
NSLog(@"Found that Artist already in Core Data");
Entity *entity = (Entity *)[NSEntityDescription insertNewObjectForEntityForName:@"Entity" inManagedObjectContext:self.managedObjectContext];
entity.name = self.nameText.text;
//call save method
if (![managedObjectContext save:&error])
{
NSLog(@"Problem saving: %@", [error localizedDescription]);
}
}
else
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Name already exists" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
[alert show];
[alert release];
}
このリンクをお寄せいただきありがとうございます。新しいことを学びました。 –