在我的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