NSManagedObject如何符合NSItemProviderReading协议?
问题描述:
创建核心数据实体的NSManagedObject
子类后,如何才能使其符合NSItemProviderReading
协议?该协议有一个必需的初始化程序,必须在类中直接声明。但是哪个指定的初始化程序应该调用NSItemProviderReading
的init(itemProviderData:, typeIdentifier:)
?NSManagedObject如何符合NSItemProviderReading协议?
这是我在下面:
import Foundation
import CoreData
@objc(Something)
public class Something: NSManagedObject, NSItemProviderReading {
public override init(entity: NSEntityDescription, insertInto context: NSManagedObjectContext?) {
super.init(entity: entity, insertInto: context)
}
// MARK: - Item Provider Reading
public static var readableTypeIdentifiersForItemProvider: [String] {
return []
}
public required init(itemProviderData data: Data, typeIdentifier: String) throws {
// This seems very hack-y…
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
self.init(context: context)
}
}
呼唤self.init(context:)
真的去这里的路吗?
答
要符合init
你所提到的,也是静止无功readableTypeIdentifiersForItemProvider
到NSItemProviderReading
协议要求的一致性:
init(itemProviderData: Data, typeIdentifier: String)
static var readableTypeIdentifiersForItemProvider: [String]
的documentation指示此与所需音符。
我没有看到你的init
有什么问题,所以如果它编译和如何计划使用类的工作我没有看到一个问题。我会推荐的是使用依赖注入将Core Data上下文传递到整个应用程序,并传递给需要它们的视图控制器。这样你就不必每次都做烦人的AppDelegate
代码(并且它更安全,因为你可以确定上下文始终可用)。