web-dev-qa-db-fra.com

Xcode 8 - Designables IB - Échec du rendu et de la mise à jour du statut de présentation automatique, l'agent est tombé en panne.

Je suis récemment passé à Xcode 8 et j'ai des problèmes avec le Storyboard.

Si j'ouvre le projet et que le Storyboard n'est pas ouvert, il se compilera et fonctionnera parfaitement. Une fois que j'ai ouvert le Storyboard, plusieurs erreurs se produisent sur IB Designables, comme indiqué ci-dessous.

 enter image description here

Ces vues sont les seules vues utilisant des vues personnalisées à partir de TextFieldEffects et BEMCheckbox que j'ai importées à l'aide de Cocoapods.

98
Alan

Vous pouvez essayer l'une des solutions suivantes pour en déterminer la cause:

  1. recherchez les journaux IBDesignablesAgentCocoaTouch dans ce répertoire: ~/Library/Logs/DiagnosticReports et voyez la cause.

  2. Accédez à l'éditeur -> Déboguer la vue sélectionnée tout en sélectionnant votre @IBDesignable UIView dans votre storyboard et consultez le suivi de la pile.

  3. Supprimer le dossier Derive Data. 

    Xcode Preference -> Location -> Derived Data
    /Users/YourMacName/Library/Developer/Xcode/DerivedData
    
  4. Nettoyez votre projet Shift + Command + Alt + K.

  5. Construisez votre projet Command + B.

94
Maria

J'ai résolu le problème en procédant comme suit:

  1. Allez à File > Workspace settings.
  2. Cliquez sur la petite flèche à droite à côté de "Données dérivées". Ceci ouvre l’application Finder à l’emplacement du dossier DerivedData.
  3. Accédez au dossier DerivedData et supprimez le dossier correspondant à votre projet.
  4. Quittez Xcode et rouvrez-le.
  5. Nettoyez votre projet shiftcommandk.
  6. construisez votre projet commandb.
  7. Ouvrez votre storyboard.
  8. Allez à Editor > Refresh all views.

Mise à jour

Parfois, il suffit parfois d'aller directement à Editor > Refresh all views. Si Refresh all views est désactivé, quittez Xcode et réessayez.

61
mnemonic23

Je viens de supprimer la vue qui a échoué et appuyez sur commande + Z pour annuler la suppression. Ça marche pour moi.

Si vous modifiez ultérieurement la vue défaillante, l'erreur peut se reproduire, procédez de la manière décrite ci-dessus.

36
Ryan.Yuen

J'ai fait face à ce problème dans CocoaPod 1.5.0. La solution consiste à réinstaller à nouveau le pod (à nouveau, à l'installer à nouveau) une fois cette erreur affichée ou vous pouvez utiliser CocoaPod 1.4.0 à la place. Cela fonctionne très bien dans 1.4.0 (au moins pour moi.)

mettre à jour: 

Ajouter le script suivant dans Podfile m'aide à résoudre le problème en 1.5.0

post_install do |installer|
  installer.pods_project.build_configurations.each do |config|
    config.build_settings.delete('CODE_SIGNING_ALLOWED')
    config.build_settings.delete('CODE_SIGNING_REQUIRED')
  end
end

référence: https://github.com/Skyscanner/SkyFloatingLabelTextField/issues/201#issuecomment-381915911

33
Jerome Li

Essayez de désactiver "Utiliser les variantes de trait" (panneau Identité et Type) pour tout fichier xib que vous pourriez avoir pour des vues personnalisées utilisées dans votre storyboard.

8
LatinCoder

mon problème a été résolu en supprimant des dossiers (liés à ce projet) du dossier de données dérivé. vous pouvez le faire en cliquant sur Fichier -> Paramètre de projet -> puis cliquez sur le signe fléché de /Users/.../Xcode/DerivedDataclick DerivedData dossier, vous verrez les dossiers nommés de votre projet les supprimer . quittez xcode pour ouvrir votre projet, nettoyez le projet en utilisant cette étape Produit-> nettoyer puis générez le projet: Produit-> Construire Ces problèmes résoudront ce problème.

6
Mitu Vinci

L'ajout du code suivant à ma classe @IBDesignable a fait l'affaire.

override init(frame: CGRect) {
    super.init(frame: frame)
}
5
Zaid Pathan

Il suffit d'ouvrir votre storyboard -> Editeur -> Actualiser toutes les vues. .__ Ce travail pour moi.

2

Quand j'ai débogué ceci j'ai découvert qu'il y a quelques classes qui modifient l'interface utilisateur. Généralement, marquelabel est une sous-classe d'UILabel ou de toute autre classe qui sous-classe UIView et dessine ui au moment de l'exécution et se heurte au moteur Autolayout. Essayez de donner une largeur ou une hauteur fixe pour ces vues personnalisées. Si cela ne résout pas votre problème, essayez les solutions suivantes: - 

Solution 1: - Décommentez #use_frameworks dans votre fichier pod. 

Solution 2: - Essayez de supprimer les données dérivées

  1. Fermez la fenêtre de l'éditeur de votre Xcode et quittez le simulateur -> 
  2. Allez dans Préférences Xcode -> Emplacements -> 
  3. Cliquez sur la petite flèche grise indiquant le chemin de données dérivé -> 
  4. Sélectionnez votre projet -> 
  5. Supprimer tous les dossiers à l'intérieur -> 
  6. Quittez Xcode et rouvrez
2
Ashish Pisey

Même erreur: si UITextField avait été personnalisé et que le constructeur de l'interface avait été créé, l'erreur dans la console était -Use de l'initialiseur non implémenté 'init (frame :)' pour la classe "CustomField"

Ajout de l'initialiseur pour corriger l'erreur

1
Avinash

Dans mon cas, j'utilisais une bibliothèque qui sous-classait UIView. Il utilisait IB_DESIGNABLE et manquait l'appel de [super awakeFromNib]. Une fois que j'ai ajouté l'appel à cette méthode, le bogue a disparu.

Je ne suis pas sûr que le fait qu'il implémente IB_DESIGNABLE ait eu un impact à cet égard.

0
AnthoPak

J'avais le même problème et je suis venu ici pour essayer de comprendre ce qui s'est passé. J'ai remarqué la réponse la mieux notée et la réponse elle-même ne m'aidait pas, car IBDesignable n'existait pas dans le dossier du journal et j'avais déjà essayé toutes les autres options, mais dans les commentaires, j'ai remarqué que quelqu'un parlait d'un init frame.

J'ai décidé d'essayer de commenter mon extension IBDesignable pour UIView et le problème a été résolu instantanément. Donc, pour résoudre ce problème, recherchez l'extension à l'origine du problème et assurez-vous de configurer les entrées requises en créant une classe IBDesignable et en fournissant les initialiseurs requis comme suit:

@IBDesignable class RoundedView: UIView {

override init(frame: CGRect) {
    super.init(frame: frame)
    sharedInit()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    sharedInit()
}

override func prepareForInterfaceBuilder() {
    super.prepareForInterfaceBuilder()
    sharedInit()
}

func sharedInit() {
}
}

IMPORTANT: n'oubliez pas d'ajouter la nouvelle classe à l'élément sur lequel vous utilisez le designable.

0
Nox

J'ai fait face à ce problème après la mise à jour vers la dernière version de XCode. Après avoir essayé les solutions multiples décrites ci-dessus, je ne fais que très bien Xcode, puis je coupais le système et l'allumais, ce qui a fonctionné pour moi.

0
Mehsam Saeed

J'ai essayé de nettoyer et exécuter le projet ne résoudra pas ce problème.

Mais fermer et rouvrir le projet fait.

0
Lal Krishna

Après avoir apporté les modifications nécessaires, modifiez le storyboard ou, dans mon cas, un fichier .xib pour qu'il soit ouvert dans "XCode 7", enregistrez et fermez. Il ne s’agit que d’une mesure palliative pour remédier aux erreurs, mais vous devrez en définitive les corriger ou le faire jusqu’à ce que vous ne puissiez plus le faire.

0
Alberto Lopez

Pour quiconque, comme moi, qui ne trouve pas ce fichier IBDesignablesAgentCocoaTouch ou lorsqu’il essaie de "déboguer les vues sélectionnées" dans l’éditeur obtient une erreur, voici un autre moyen de déboguer ces erreurs "Échec du rendu".

Ouvrez l'application "Terminal", dans la barre latérale, sélectionnez votre Mac actuel (il sera probablement sélectionné automatiquement par défaut), puis dans la barre de recherche, recherchez "IBSceneUpdate" et appuyez sur Entrée. Chaque fois que vous obtenez une erreur Xcode pour un IBDesignable ne pouvant pas être restitué, vous obtenez également une nouvelle entrée "IBSceneUpdate" avec plus de détails sur l'erreur. C’est du moins comment j’ai pu déboguer mes erreurs IBDesignable!

 enter image description here 

0
Stelabouras

Si vous utilisez un fichier xib pour uiview personnalisé. Essaye ça:

Changer de

Bundle.main.loadNibNamed("UserView", owner: self, options: nil)

À:

let bundle = Bundle(for: UserView.self) 
bundle.loadNibNamed("UserView", owner: self, options: nil)
0