【发布时间】:2018-12-31 08:16:55
【问题描述】:
我正在开发一个 SDK,它只使用 1 个 NSManagedObjectContext,类型为 privateQueueConcurrencyType。
为了获取对象,我使用perform(),然后将结果传递给闭包。
我从后台线程调用此方法,并在后台线程(可能与调用它的线程不同)上使用结果。
我知道在线程之间传递对象是不行的,但我对我今天处理它的方式并不满意。
我处理它的方式是,每个NSManagedObject 都映射到“普通”Swift 对象,然后我使用 swift 对象。
例如:
Foreach NSManagedObject 从结果中创建新对象(不是NSManagedObject),然后我使用这些对象。
我想使用NSManagedObjects,而不是创建包含相似数据的新数据。
最好的方法是什么? 我还能使用 NSManagedObject 吗?
func getRecordsByPredicate<T: NSManagedObject>(type: T.Type, predicate: NSPredicate, success: @escaping (_ record: [T]?) -> Void, failure: @escaping () -> Void) {
self.context.perform {
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: String(describing: type.self))
fetchRequest.includesPropertyValues = false
fetchRequest.predicate = predicate
do {
let results = try context.fetch(fetchRequest)
success(results as? [T])
} catch {
print(error.localizedDescription)
failure()
}
}
}
【问题讨论】:
标签: swift core-data nsmanagedobject