web-dev-qa-db-fra.com

Swift 2, avertissement: impossible de charger aucune information de classe Objective-C à partir du cache partagé dyld

J'ai trouvé quelques questions sur ce problème, mais aucune ne m'aidait à résoudre mon problème. J'essaye de sauvegarder un objet dans des données de base en utilisant ce code (qui fonctionnait parfaitement dans Xcode 6 et Simulator ...):

let fetchRequest = NSFetchRequest(entityName: "Patient")
let fetchedResults : [NSManagedObject]!
do {
    fetchedResults = try managedContext.executeFetchRequest(fetchRequest) as! [NSManagedObject]
    patienten = fetchedResults
}    catch {
    print("error")
}

J'ai ajouté le do-try-catch une fois que j'ai commencé à travailler sur ce projet dans la version bêta de Xcode 7 et un périphérique physique. Maintenant, lorsque je clique sur le bouton Enregistrer, ce morceau de code est appelé, l'application se fige et j'obtiens ce qui suit:

avertissement: impossible de charger les informations de classe Objective-C à partir du cache partagé dyld. Cela réduira considérablement la qualité des informations de type disponibles.

Screenshot

Est-ce que quelqu'un sait où je me suis trompé?

54
zero

Pour tous ceux qui rencontrent cela à l'avenir, je viens de rencontrer ce problème moi-même et il s'est avéré que j'étais en train de recevoir un débordement de pile d'une fonction récursive.

Apparemment en train d'appeler setValue:forKey: sur un NSObject appelle le set[Key] fonction, où [Key] est le nom (en majuscule) que vous avez donné à la section forKey.

Donc, si comme moi, vous avez un code qui ressemble à ce qui suit, cela provoquera une boucle infinie et un crash.

func setName(name: String) {
    self.setValue(name, forKey: "name")
}
23
thislooksfun

Choisissez Product> Clean

J'ai eu le même problème. J'ai supprimé l'application de l'appareil. Puis "Produit-> Nettoyer" dans le menu XCode. Lorsque j'ai relancé l'application, le problème a été résolu.

14
Big D

Swift 3:

En fait, ce problème se produisait souvent quand une propriété en entrée était déclarée comme type NSError et que le compilateur attendait une sortie Error. Modifiez donc le type d'entrée en Error pour résoudre ce problème. .

1

Ce qui m'a aidé dans un problème similaire (xCode 7, Swift 2):

lecture cette question

Ou plus rapidement sans expliquer la raison de la solution: il suffit de commenter @objc(className) dans votre NSManagedObjectSubclass, généré à partir de votre entité CoreData (@objc(Patient) - dans votre cas).

Cette solution (si le problème persiste) ne s'applique pas à xCode 7.1/Swift 2.1, car la méthode de génération de NSManagedObjectSubclasses a été modifiée.

N'oubliez pas de nettoyer votre projet (Product > Clean) et en supprimant l’application de votre appareil/simulateur pour remplacer le stockage CoreData.

0
Yurii Koval