2017-01-11 1 views
2

J'ai créé un cadre qui est un cocoapod, le cadre utilise les données de base, mon spec pod a:cabosse avec Core Data ne peut pas trouver entité à consommer application

s.resource_bundles = { 
    'FrameworkModel' => ['Model/**/*.xcdatamodeld'] 
    } 

et tout fonctionne très bien dans une démo application qui est une autre cible dans l'espace de travail-cadre, mais quand je l'installe comme un pod j'ai reçu un

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'NSFetchRequest could not locate an NSEntityDescription for entity name 'EntityName'' 

Je ne suis pas sûr de ce que d'essayer, mais je l'ai fait changer le nom du module sur le fichier de modèle de données sans effet. (Je suis allé du nom du projet-cadre à « Module de produit actuel » et le dos.

Je vois le fichier modèle de données dans le projet de dosettes dans l'espace de travail.

Répondre

0

Mon problème a été causé par la façon dont j'ai créé ma pile de données de base, plus précisément le modèle d'objet géré, que je créais à partir d'une URL d'un paquet qui n'existe pas en tant que consommateur de pod, alors maintenant c'est dans la définition que je vérifie si un paquet est disponible comme dans l'espace de travail (pour l'application de démonstration), ou s'il existe sous le nom de l'ensemble de ressources défini dans mon fichier pod, comme ceci:

fileprivate lazy var managedObjectModel: NSManagedObjectModel = { 

// the moc's model should be accessible via apps in this workspace 
// or through the module that cocoapods will create as part of the file's 
// resource bundle, as such, we need to look in two different places 
// to use the correct bundle at run time 
var rawBundle: Bundle? { 

    if let bundle = Bundle(identifier: "com.thefredelement.Framework") { 
     return bundle 
    } 

    guard 
     let resourceBundleURL = Bundle(for: type(of: self)).url(forResource: "FrameworkModel", withExtension: "bundle"), 
     let realBundle = Bundle(url: resourceBundleURL) else { 
      return nil 
    } 

    return realBundle 
} 

guard let bundle = rawBundle else { 
    print("Could not get bundle that contains the model ") 
    return NSManagedObjectModel() 
} 

guard 
    let modelURL = bundle.url(forResource: self.model, withExtension: "momd"), 
    let model = NSManagedObjectModel(contentsOf: modelURL) else { 
     print("Could not get bundle for managed object model") 
     return NSManagedObjectModel() 
} 

return model 
}()