2015-10-15 1 views
9

Je vais avoir tout à coup une étrange erreur et reproductible lors de l'utilisation d'une classe @IBDesignable, les propriétés sont @IBInspectable donne l'avertissement suivant:@IBDesignable - @IBInspectable, valeur clé de classe non conforme codage

Main. storyboard: avertissement: IB Designables: Ignorer l'attribut d'exécution défini par l'utilisateur pour le chemin clé "test" sur l'instance de "UIButton". Hit une exception lors de la tentative de définition de sa valeur: [setValue: forUndefinedKey:]: cette classe n'est pas compatible avec le codage de valeur de clé pour le test de clé.

Pour être clair cet avertissement est seulement un problème dans Xcode, il empaquette bien. Toujours agaçant!

Étapes pour reproduire

  1. Créer un nouveau projet
  2. Créer une sous-classe personnalisée @IBDesignable UIButton, avec une @IBInspectable propriété Chaîne:

    import UIKit 
    
    @IBDesignable 
    class TempButton: UIButton { 
        @IBInspectable var test:String = "" 
    } 
    
    1. Faites glisser un bouton vers un contrôleur de vue dans le storyboard et attribuez-lui la classe personnalisée "TempButton" dans l'inspecteur d'identité.
    2. Maintenant, l'attribut 'Test' devrait apparaître dans l'inspecteur d'attributs pour les propriétés 'Temp Button' - tapez n'importe quoi dans ce champ.
    3. Bam! L'avertissement ci-dessus apparaît. Supprimez le texte du champ et l'avertissement disparaît.

J'ai essayé plusieurs solutions - différents noms de variables, ce qui rend la propriété « test » en option, en utilisant un initialiseur, pas de chance jusqu'à présent.

Voici une capture d'écran du problème:

enter image description here

+0

Très intéressant et je ne peux pas reproduire le problème. J'ai fait exactement ce que tu as dit. Pas d'avertissement. Quelle version de Xcode utilisez-vous? Avez-vous pensé à _build_ l'application en premier? Avez-vous essayé de redémarrer l'ordinateur (aide à claquer Xcode sur le côté de la tête)? – matt

+0

J'ai claqué Xcode sur le côté de la tête (c'est-à-dire redémarré!), Et je l'ai essayé à la fois sur la version actuelle de Xcode (7.0.1) et la beta (7.1 beta 3), pas de chance. Merci d'avoir regardé cela, intéressant que cela ne se passe pas pour vous. –

+0

Avoir ajouté une capture d'écran pour aider à diagnostiquer le problème, si d'autres personnes ne sont pas en mesure de répliquer. –

Répondre

9

Je fixe ce en assurant la Interface Builder « construire » n'a pas eu d'erreurs. Voici ce que cela signifie:

  1. Dans le panneau gauche de Xcode, allez dans le Navigateur de rapports (. Le dernier élément de l'onglet en haut)
  2. Dans la liste Reporst, après vos objectifs, vous devriez voir " Interface Builder ". Développez cet élément.
  3. Assurez-vous qu'aucun des éléments n'a d'erreur (comme indiqué par le X rouge).
  4. Si vous trouvez une erreur ici, sélectionnez-la et vous verrez plus de détails du problème. Corrigez ce problème, nettoyez et reconstruisez.

Notez que le problème si probablement sans rapport avec le fichier que vous travaillez. Il semble que si la construction Interface Builder échoue avant qu'il arrive à construire le fichier en question, vous verrez ces avertissements très énigmatiques.

(Ma cause a fini par être une cible d'extension de l'action référence à un catalogue d'actifs AppIcon et SplashScreen de manière incorrecte.)

+0

Gah! Cela signifie que je dois insérer @available à des classes spécifiques à iOS9 + ... et gérer les anciennes versions. Tellement de travail pour juste charger le Storyboard correctement. WTH. – nekonari

+5

Fermer Xcode. Effacez le dossier DerivedData "/Users/..../Library/Developer/Xcode/DerivedData" et reconstruisez. –

7

Je face au même problème et je l'ai résolu. Pendant que vous ouvrez le storyboard: 1-Click Éditeur dans le menu supérieur. 2-Click sur Rafraîchir tous les vues. 3-redémarrez votre application. 4-Build.

+1

Peut confirmer que cela fonctionne dans certains cas.Xcode 8.2.1 – 0000101010

+0

cela a fonctionné pour moi aussi sur 8.2.1. Il m'est apparu que j'avais désactivé les vues auto-rafraîchissantes lorsque je travaillais en mode hors connexion récemment pour économiser de la batterie, alors peut-être que le problème venait de cela et n'avait pas rafraîchi les vues récemment. – Natalia