检查CoreData中是否已存在name属性

Ser*_*nce 7 iphone cocoa-touch core-data ios

我有一个名为的实体BankInfo,其中一个参数name是一个字符串.我只是想知道,有没有办法CoreData检查并查看是否name已经存在BankInfo而无需检索每个BankInfo对象并单独循环并检查?实现这一目标的最有效方法是什么?

Mar*_*n R 22

您可以使用带谓词获取请求来查找与特定属性匹配的对象.如果您只对 具有给定键的对象存在感兴趣,请使用而不是实际获取对象,并将结果集限制为一个对象:countForFetchRequest

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"BankInfo"];
[request setPredicate:[NSPredicate predicateWithFormat:@"name = %@", theName]];
[request setFetchLimit:1];
NSUInteger count = [context countForFetchRequest:request error:&error];
if (count == NSNotFound)
    // some error occurred
else if (count == 0)
    // no matching object
else
    // at least one matching object exists
Run Code Online (Sandbox Code Playgroud)


Arp*_*gre 12

对于其他喜欢我的人来说,最终在这里寻找Swift 3解决方案,这里是:

let request = NSFetchRequest<NSFetchRequestResult>(entityName: "BankInfo")
let predicate = NSPredicate(format: "name == %@", theName)
request.predicate = predicate
request.fetchLimit = 1

do{
    let count = try managedContext.count(for: request)   
    if(count == 0){
    // no matching object
    }
    else{
    // at least one matching object exists
    }
  }
catch let error as NSError {
     print("Could not fetch \(error), \(error.userInfo)")
  }
Run Code Online (Sandbox Code Playgroud)