检查名称属性是否已经存在于CoreData中
我有一个名为BankInfo
的实体,其中一个参数是name
,它是一个string。 我只是想知道,有没有CoreData
的方式来检查,如果一个name
已经存在于BankInfo
而不必检索每个BankInfo
对象,并单独循环,并检查? 什么是最有效的方法来完成这个?
您可以使用带谓词的获取请求来查找匹配某些属性的对象。 如果您只对具有给定键的对象感兴趣,请使用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
对于其他人,像我这样的人,最终在这里寻找Swift 3解决scheme,这里是:
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)") }