Swift NSManagedObject如何符合NSItemProviderReading协议?

Swift NSManagedObject如何符合NSItemProviderReading协议?,swift,core-data,drag-and-drop,ios11,swift4,Swift,Core Data,Drag And Drop,Ios11,Swift4,在创建核心数据实体的NSManagedObject子类后,如何使其正确符合NSItemProviderReading协议?协议具有必需的初始值设定项,必须在类中直接声明。但是应该调用哪个指定的初始值设定项NSItemProviderReading的init(itemProviderData:,typeIdentifier:) 以下是我的资料: import Foundation import CoreData @objc(Something) public class Something: N

在创建核心数据实体的
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:)
真的是正确的方法吗?

要符合
NSItemProviderReading
协议,需要符合您提到的
init
以及静态变量
readableTypeIdentifiersForItemProvider

init(itemProviderData: Data, typeIdentifier: String)

static var readableTypeIdentifiersForItemProvider: [String]
用所需的注释表示这一点

我看不出您的
init有任何问题,因此如果它编译并与您计划使用该类的方式配合使用,我看不出有任何问题。我建议使用依赖项注入将整个应用程序中的核心数据上下文传递给需要它们的视图控制器。这样,您就不必每次都编写恼人的
AppDelegate
代码(而且更安全,因为您可以确保上下文始终可用)