2017-07-31 2 views
1

Après avoir créé une sous-classe NSManagedObject d'une entité Core Data, comment puis-je la rendre conforme au protocole NSItemProviderReading? Le protocole a un initialiseur requis qui doit être déclaré directement dans la classe. Mais quel initialisateur désigné NSItemProviderReading appel init(itemProviderData:, typeIdentifier:)?Comment un objet NSManagedObject peut-il être conforme au protocole NSItemProviderReading?

C'est ce que j'ai ci-dessous:

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) 
    } 
} 

appelle self.init(context:) vraiment la bonne façon d'aller là-bas?

Répondre

0

Pour être conforme au protocole NSItemProviderReading exige la conformité à la init vous avez mentionné et aussi le var readableTypeIdentifiersForItemProvider statique:

init(itemProviderData: Data, typeIdentifier: String) 

static var readableTypeIdentifiersForItemProvider: [String] 

Le documentation indique ceci avec la note requis.

Je ne vois rien de mal avec votre init donc s'il compile et fonctionne avec la façon dont vous prévoyez d'utiliser la classe, je ne vois pas de problème. Ce que je recommanderais est d'utiliser l'injection de dépendance pour passer le contexte des données de base dans toute votre application, aux contrôleurs de vue qui en ont besoin. De cette façon, vous n'avez pas à faire le code AppDelegate ennuyeux à chaque fois (et c'est plus sûr car vous pouvez être sûr que le contexte est toujours disponible).