CoreData中的重复名称?

时间:2012-04-05 20:51:50

标签: iphone objective-c core-data

在我的CoreData对象中,我有一个name属性,只是一个字符串。是否有任何自动方法或框可以勾选以阻止用户保存具有相同“名称”属性的两个对象?或者我可以手动检查一下吗?

感谢。

2 个答案:

答案 0 :(得分:3)

使用key value validation(KVV)。在您的实体类中添加-validateName:error:方法。在该方法中,您可以对具有相同名称的对象执行提取。如果找到任何,则输入的名称在数据存储中不是唯一的,因此返回错误。

答案 1 :(得分:2)

不幸的是,您没有任何复选框或自动系统来防止Core数据中出现重复数据。所以你必须自己照顾它..它很容易实现。

您必须使用NSPredicatefetchedResultsController相结合来搜索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];
}

礼貌:TheAppCodeBlog