【问题标题】:Core Data: Exclude a NSManagedObject in fetch request in swift核心数据:在快速获取请求中排除 NSManagedObject
【发布时间】:2018-01-01 11:03:08
【问题描述】:

我有一个名为“学生”的实体,它存储学生的数据。学生手机号必须唯一。当我们在核心数据中插入一个新的学生实体时,我已经验证了它。现在当我尝试更新现有学生数据时遇到问题,它总是返回要更新的相同对象。我有一个学生的 NSManagedbject,我希望它在我的获取请求中排除。

这是我的代码:

let request = NSFetchRequest<NSFetchRequestResult>(entityName:"Student")
request.predicate = NSPredicate(format:"mobile == %@", "1234567890")
do {
     let count = try context.count(for:request)
 } catch {
       print(error.localizedDescription)
 }

使用上面的代码,我在更新现有学生时总是得到 1 条记录

【问题讨论】:

  • 给出你的核心数据代码,或许可以解决你的问题。或查看:stackoverflow.com/questions/40756178/…
  • 请在问题中包含您的代码。如果没有适当的信息,一个人无法帮助您
  • 你检查过上面的 url 链接
  • @RajJoshi 是的,我检查了你的链接,但它没有解决我的问题
  • 在上面的代码中,你总是得到单个记录的原因是移动的谓词 == 1234567890

标签: ios core-data swift3 nsmanagedobject nsfetchrequest


【解决方案1】:

我已经通过使用 NSPredicate 来做到这一点,如下所示:

let predicate = NSPredicate(format:"NOT (self IN %@)",[arrayofNSManagedObjects])


public static func checkUniqueStudent(mobile:String,student:NSManagedObject? = nil) -> Bool {

    guard let context = DBManager.shared.managedObjectContext else { return true }

    let request = NSFetchRequest<NSFetchRequestResult>(entityName:"Student")

    let titlePredicate = NSPredicate(format: "mobile == %@", mobile)

    var predicateArray:[NSPredicate] = [
        titlePredicate,
    ]

    //here I checked if we are updating an existing record
    if student != nil {
        let studentPredicate = NSPredicate(format: "NOT (self IN %@)", [student!])
        predicateArray.append(studentPredicate)
    }

    let compoundPredicate = NSCompoundPredicate(type: .and, subpredicates: predicateArray)

    request.predicate = compoundPredicate

    do {
        let count = try context.count(for: request)

        if count > 0 {
            return true
        } else {
            return false
        }

    } catch {
        print(error.localizedDescription)
    }

    return true
}

【讨论】:

    猜你喜欢
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 2018-02-11
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多