【发布时间】:2021-05-31 23:41:51
【问题描述】:
我有这个实体类通过它的id 检索一个对象。如果找不到对象,则创建一个并返回。
static var request:NSFetchRequest<NSFetchRequestResult> {
let request: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: String(describing: Self.self))
request.returnsDistinctResults = true
request.returnsObjectsAsFaults = true
return request
}
class func readObjectWith(id:String,
createIfNotFound:Bool = false,
context:NSManagedObjectContext) -> Object? {
// search for the object
let predicate = NSPredicate(format: "id == \(id)")
request.predicate = predicate
do {
guard let result = try context.fetch(request) as? [Object],
result.count > 0,
let item = result.first
else {
if createIfNotFound == false { return nil }
print("new item")
return Object(context: context)
}
// item exists, return
return item
} catch {
return nil
}
}
我从核心数据中删除所有对象。我循环运行它。每次循环迭代时,都会使用不同的id 和createIfNotFound = true 调用它。 “新项目”部分将第一次运行。所有其他时间都将返回创建的第一个对象,并且该对象的 id 与传递给方法的 id 无关。
为什么?
【问题讨论】:
-
Patient是Object的子类吗? -
这是一个错误。固定