在我的CoreData對象中,我有一個名稱屬性,只是一個字符串。是否有任何自動方法或框可以打勾以阻止用戶保存具有相同「名稱」屬性的兩個對象?或者我應該手動檢查這個?CoreData中的重複名稱?
謝謝。
在我的CoreData對象中,我有一個名稱屬性,只是一個字符串。是否有任何自動方法或框可以打勾以阻止用戶保存具有相同「名稱」屬性的兩個對象?或者我應該手動檢查這個?CoreData中的重複名稱?
謝謝。
使用key value validation(KVV)。將-validateName:error:
方法添加到實體的類中。在該方法中,您可以爲具有相同名稱的對象執行提取操作。如果找到任何內容,則輸入的名稱在數據存儲區中將不唯一,因此返回錯誤。
不幸的是,您沒有任何複選框或自動化系統來防止Core數據中的重複數據。所以你必須自己照顧它..它很容易實現。
您必須使用NSPredicate
與fetchedResultsController
結合來執行搜索,以確定name
是否已經存在。如果您輸入的name
已經存在,那麼您的fetchedResultsController.fetchedObjects
計數將大於零,因此您不允許重複輸入。如果找不到重複的條目fetchedResultsController.fetchedObjects
是< 1,那麼您將允許條目。嘗試代碼是這樣的:
- (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];
}
感謝您的鏈接。學到了新東西。 – 2012-04-06 04:42:21