私の CoreData オブジェクトには、name 属性があり、単なる文字列です。ユーザーが同じ「名前」属性を持つ2つのオブジェクトを保存するのを止めるためにチェックできる自動化された方法またはボックスはありますか? それとも、これを手動で確認しますか?
ありがとう。
私の CoreData オブジェクトには、name 属性があり、単なる文字列です。ユーザーが同じ「名前」属性を持つ2つのオブジェクトを保存するのを止めるためにチェックできる自動化された方法またはボックスはありますか? それとも、これを手動で確認しますか?
ありがとう。
キー値検証(KVV)を使用します。-validateName:error:
エンティティのクラスにメソッドを追加します。そのメソッドでは、同じ名前のオブジェクトのフェッチを実行できます。見つかった場合、入力された名前はデータ ストア内で一意ではないため、エラーを返します。
残念ながら、コア データの重複データを防止するためのチェック ボックスや自動化されたシステムはありません。したがって、自分で処理する必要があります..実装は簡単です。
が既に存在するかどうかにかかわらず、検索を実行するには、NSPredicate
と組み合わせて使用する必要があります。入力した がすでに存在する場合は、カウントが 0 よりも大きくなるため、重複したエントリは許可されません。重複エントリが見つからない場合は <1 なので、エントリを許可します。次のようなコードを試してください。fetchedResultsController
name
name
fetchedResultsController.fetchedObjects
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];
}