[英]Core Data: Exclude a NSManagedObject in fetch request in swift
我有一个名为“学生”的实体,用于存储学生的数据。 学生的手机号码必须唯一。 当我们在核心数据中插入新的学生实体时,我已经对其进行了验证。 现在,当我尝试更新现有的学生数据时遇到一个问题,它总是返回要更新的同一对象。 我有一个学生的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条记录
我通过使用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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.