Objective c 如何检查持久存储中是否已存在实体

Objective c 如何检查持久存储中是否已存在实体,objective-c,core-data,Objective C,Core Data,我对核心数据编程非常陌生。我有一个问题,希望得到澄清 假设我有一个名为Company的NSManagedObject,具有以下属性: 公司名称 公司邮件 霍尼诺公司 公司名称 公司密码 在这个对象中,companyName属性被索引 所以,我的问题是,如何确保只有相同的companyName、companyEmail、companyPhoneNo、companyUserName和companyPassword条目 我是否需要请求检查是否存在具有相同属性值的记录,或者使用对象id进行简单检查就

我对核心数据编程非常陌生。我有一个问题,希望得到澄清

假设我有一个名为
Company
的NSManagedObject,具有以下属性:

  • 公司名称
  • 公司邮件
  • 霍尼诺公司
  • 公司名称
  • 公司密码
在这个对象中,
companyName
属性被索引

所以,我的问题是,如何确保只有相同的companyName、companyEmail、companyPhoneNo、companyUserName和companyPassword条目

我是否需要请求检查是否存在具有相同属性值的记录,或者使用对象id进行简单检查就足够了


谢谢。

您有两个选项来维护您的存储区,其中没有重复项:

  • 使获取插入
  • 插入所有新数据,然后在保存前删除重复数据
  • 什么更快更方便?大概是第一条路吧。但你最好用仪器测试一下,找到适合你的应用程序的正确方法

    这是关于这个问题的文件。
    以下是一个可能有帮助的示例:

    NSError * error;
    NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init];
    [fetchRequest setEntity:[NSEntityDescription entityForName:NSStringFromClass([self class])
                                        inManagedObjectContext:managedObjectContext]];
    [fetchRequest setFetchLimit:1];
    
    // check whether the entity exists or not
    // set predicate as you want, here just use |companyName| as an example
    [fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"companyName == %@", companyName]];
    
    // if get a entity, that means exists, so fetch it.
    if ([managedObjectContext countForFetchRequest:fetchRequest error:&error])
      entity = [[managedObjectContext executeFetchRequest:fetchRequest error:&error] lastObject];
    // if not exists, just insert a new entity
    else entity = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([self class])
                                                inManagedObjectContext:managedObjectContext];
    [fetchRequest release];
    
    // No matter it is new or not, just update data for |entity|
    entity.companyName = companyName;
    // ...
    
    // save
    if (! [managedObjectContext save:&error])
      NSLog(@"Couldn't save data to %@", NSStringFromClass([self class]));
    
    提示:
    countForFetchRequest:error:
    实际上不提取实体,它只返回与您之前设置的
    谓词
    匹配的多个实体