User Defined Runtime Attributes
Dans IB je défini une valeur dans mon ViewController avec User Defined Runtime Attributes. J'ai donc dans mon ViewController une clé et une valeur.
Comment puisse récupérer cette valeur dans le viewdidload voir même plutôt dans l'affichage de mon ViewController.
j'ai essayer :
let s = self.value(forKey: "category")
Mais ça crash :
this class is not key value coding-compliant for the key category.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Dans mon souvenir, il suffit simplement que l'objet ait la propriété "category".
Attention, l'objet doit hériter de NSObject.
Désolé Céroce, je comprends pas bien. Peut-être me suis je mal exprimé.
Dans Interface builder je défini pour mon ViewController une valeur comme ci-dessous :
"catagory" ou "category" ?
C'est la cata... hum... oui je sors...
category mais c'est juste une erreur de copier/coller dans le post ici
D'après ce que j'ai compris, les valeurs définis dans "User Defines ..." permettent de modifier des propriétés de l'instance mais pas d'en créer. Il faut donc que ta classe ViewController dispose d'une propriété "category" de type String.
Comme l'a dit Céroce finalement.
Merci j'y suis, il y a quand même une subtilité il faut que cette propriété soit de type @objc pour que cela fonctionne.
Voici ce que cela donne
Ce qui affiche bien service pour moi ;-)
Mais pourquoi as-tu besoin de ce dans IB ?
En fait j'ai une application toute simple avec 2 tab items qui affiche chacun un view controller. Les deux view controllers sont identiques : ils gèrent une collectionView. La seule différence sont les données (en gros un filtre sur ma sources).
Avec un segue normal j'aurais passé cela en argument dans le performSegue mais dans le cas d'une tabBar cela m'a sembler plus simple de faire comme cela.
Je reste ouvert à toute "meilleure" proposition...
J'avais pensé à cette solution mais j'aime bien aussi la solution avec le Storyboard.
La problème avec les "User Defined Runtime Attributes" est qu'ils sont résolus en Strings, donc on peut se tromper avec l'orthographe.
À la place des "User Defined Runtime Attributes", on peut utiliser @IBDesignable et @IBInspectable sur la vue :
ça donnera un var dans l'inspecteur d'IB sans besoin d'utiliser "self.value(forKey: "category")" pour le récupérer.