在我的 CoreData 对象中,我有一个 name 属性,只是一个字符串。是否有任何自动化方法或框我可以勾选以阻止用户保存具有相同“名称”属性的两个对象?还是我应该手动检查?
谢谢。
在我的 CoreData 对象中,我有一个 name 属性,只是一个字符串。是否有任何自动化方法或框我可以勾选以阻止用户保存具有相同“名称”属性的两个对象?还是我应该手动检查?
谢谢。
使用键值验证(KVV)。-validateName:error:
向您的实体类添加一个方法。在该方法中,您可以对具有相同名称的对象执行提取。如果找到,则输入的名称在数据存储中将不是唯一的,因此返回错误。
不幸的是,您没有任何复选框或自动化系统来防止核心数据中的重复数据。所以你必须自己照顾它。它很容易实现。
您必须使用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];
}