2017-07-31 9 views
1

コアデータエンティティのサブクラスNSManagedObjectを作成したら、それをプロトコルに正しく準拠させるにはどうすればよいですか?プロトコルには、クラス内で直接宣言する必要のある初期化子があります。しかし、どちらの指定イニシャライザ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:)を呼び出していますか? NSItemProviderReadingプロトコルに準拠して

答えて

0

initあなたが言及しても、静的VAR readableTypeIdentifiersForItemProviderへの適合性を必要とします。

init(itemProviderData: Data, typeIdentifier: String) 

static var readableTypeIdentifiersForItemProvider: [String] 

documentation必要ノートでこれを示します。

initに間違いはありません。コンパイルして、クラスをどのように使用する予定があるのであれば問題はありません。私がお勧めしたいのは、依存関係注入を使用して、アプリケーション全体でCore Dataコンテキストを必要とするView Controllerに渡すことです。そうすれば、たびに都合のよいAppDelegateコードを実行する必要はありません(コンテキストが常に利用可能であることがわかるので安全です)。

関連する問題