检查CoreData中是否已经存在名称属性。

问题描述 投票:0回答:1

我有一个实体叫 BankInfo,其参数之一是 name 这是一个字符串。我只是想知道,是否有一种方法,在 CoreData 以检查并查看是否有 name 已有 BankInfo 而无需检索每一个 BankInfo 对象,并逐一循环检查?最有效的方法是什么?

swift swiftui nspredicate nsfetchrequest
1个回答
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

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)")
  }
© www.soinside.com 2019 - 2024. All rights reserved.