2017-07-31 130 views
1

创建核心数据实体的NSManagedObject子类后,如何才能使其符合NSItemProviderReading协议?该协议有一个必需的初始化程序,必须在类中直接声明。但是哪个指定的初始化程序应该调用NSItemProviderReadinginit(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:)真的去这里的路吗?

回答

0

要符合init你所提到的,也是静止无功readableTypeIdentifiersForItemProviderNSItemProviderReading协议要求的一致性:

init(itemProviderData: Data, typeIdentifier: String) 

static var readableTypeIdentifiersForItemProvider: [String] 

documentation指示此与所需音符。

我没有看到你的init有什么问题,所以如果它编译和如何计划使用类的工作我没有看到一个问题。我会推荐的是使用依赖注入将Core Data上下文传递到整个应用程序,并传递给需要它们的视图控制器。这样你就不必每次都做烦人的AppDelegate代码(并且它更安全,因为你可以确定上下文始终可用)。