在创建Core Data实体的NSManagedObject
子类之后,如何使其与NSItemProviderReading
协议正确匹配?该协议具有必需的初始化程序,必须在类中直接声明。但是哪个指定的初始值设定项应NSItemProviderReading
init(itemProviderData:, typeIdentifier:)
调用?
这就是我在下面的内容:
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:)
真的是走这条路的正确方法吗?
答案 0 :(得分:0)
要符合NSItemProviderReading
协议要求符合您提到的init
以及静态变量readableTypeIdentifiersForItemProvider
:
init(itemProviderData: Data, typeIdentifier: String)
static var readableTypeIdentifiersForItemProvider: [String]
documentation表示必需注释。
我没有看到你的init
有任何问题,所以如果它编译并使用你计划如何使用这个课我没有看到问题。我建议使用依赖注入将整个应用程序中的Core Data上下文传递给需要它们的视图控制器。这样你就不必每次都做烦人的AppDelegate
代码(而且它更安全,因为你可以确保上下文始终可用)。