Pourquoi ne l'ajout de "dynamique" réparer mon mauvais problèmes d'accès?
J'ai un étrange problème qui est apparu avec iOS 8 Beta 5 (ce problème ne se produit pas avec les versions précédentes).
J'ai essayé de créer un projet vide et essayez de reproduire le problème, mais je ne suis pas en mesure de le faire, donc je ne suis pas tout à fait sûr d'où vient le problème.
Ce que je vois, c'est que tenter d'accéder à des méthodes d'une coutume NSManagedObject
sous-classe les résultats dans un étrange EXC_BAD_ACCESS erreur.
Par exemple:
var titleWithComma: String {
return "\(self.title),"
}
Cette méthode, de beaucoup d'autres, les causes de ce problème lors de l'appel. Cependant, l'ajout d'un dynamic
mot-clé avant de prendre la question en aller:
dynamic var titleWithComma: String {
return "\(self.title),"
}
Je sais que je ne donne pas assez d'info, parce que honnêtement, je ne sais pas comment faire pour isoler le problème, mais quelqu'un peut-il expliquer ce qui est éventuellement se passe, et pourquoi l'ajout de dynamic
pourrait résoudre ce problème?
Vous devez vous connecter pour publier un commentaire.
De Swift de Référence du Langage (Langue de Référence > les Déclarations > Déclaration Modificateur)
Cela signifie que votre propriété/méthode peut être consulté par le code Objective-C ou de classe. Normalement, il arrive quand vous sous-classement d'un Swift classe d'Objective-C classe de base.
@dynamic
modificateur où la Swiftdynamic
d'une chose.@objc
a tous ses membres implicitementdynamic
?dynamic
ont concept différent. Veuillez suivre le lien pour plus de détails:cocoacasts.com/what-does-the-dynamic-keyword-mean-in-swift-3C'est à partir de la version préliminaire du Swift /Objective-C à l'interopérabilité la documentation:
La Mise En Œuvre De Base De Données Objet Géré Sous-Classes
De base de Données fournit le stockage sous-jacent et la mise en œuvre de propriétés dans les sous-classes de la NSManagedObject classe. Ajouter le
@NSManaged
attribut avant chaque définition de propriétés de votre objet géré sous-classe qui correspond à un attribut ou une relation dans votre Base de Données modèle. Comme le@dynamic
attribut en Objective-C, le@NSManaged
attribut informe le Swift compilateur que le stockage et la mise en œuvre d'une propriété sera fournie au moment de l'exécution. Cependant, contrairement à@dynamic
, le@NSManaged
attribut est uniquement disponible pour les Données de Base de soutien.Donc, à cause de certains de l'Objective-C fonctions d'exécution de Base de Données utilise sous les couvertures, Swift propriétés doivent être spécialement annoté.
titleWithComma
n'est pas réellement un régime enregistré d'variable du modèle, comme dans le cadre du schéma. Il est plus juste une méthode d'instance, mais destinée à être accessible sans la fonction de la notation, j'.e()
Ou faut-il toujours pas d'importance?