2012-04-05 12 views
4

私のCoreDataオブジェクトには、name属性があります。文字列だけです。同一の「名前」属性を持つ2つのオブジェクトを保存するユーザーを停止するためにチェックできる自動化メソッドまたはボックスはありますか?または、これを手動でチェックするだけですか?CoreDataに重複している名前はありますか?

ありがとうございました。

答えて

3

使用key value validation(KVV)このようなコードの何かを試してみてください。エンティティのクラスに-validateName:error:メソッドを追加します。この方法では、同じ名前のオブジェクトのフェッチを実行できます。見つかった場合は、入力した名前がデータストア内で一意ではないため、エラーを返します。

+0

このリンクをお寄せいただきありがとうございます。新しいことを学びました。 –

2

残念ながら、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]; 
} 

礼儀:TheAppCodeBlog

関連する問題