wake-up-neo.com

Xcode 8 - IB Designables - Fehler beim Rendern und Aktualisieren des Status des automatischen Layouts. Der Agent ist abgestürzt

Ich habe kürzlich ein Upgrade auf Xcode 8 durchgeführt und habe Probleme mit dem Storyboard.

Wenn ich das Projekt öffne und das Storyboard nicht geöffnet habe, wird es gut kompiliert und ausgeführt. Nachdem ich das Storyboard geöffnet habe, erhalte ich mehrere Fehler in Bezug auf IB Designables (siehe unten).

 enter image description here

Diese Ansichten sind die einzigen Ansichten, die benutzerdefinierte Ansichten aus TextFieldEffects und BEMCheckbox verwenden, die ich mit Cocoapods importiert habe.

98
Alan

Sie können eine der folgenden Methoden ausprobieren, um die Ursache herauszufinden:

  1. suchen Sie in diesem Verzeichnis nach den IBDesignablesAgentCocoaTouch-Protokollen: ~/Library/Logs/DiagnosticReports und sehen Sie die Ursache.

  2. Wechseln Sie zur Editor -> Ausgewählten Ansicht debuggen, während Sie Ihren @IBDesignable UIView in Ihrem Storyboard auswählen, und sehen Sie die Stapelablaufverfolgung.

  3. Löschen Sie den Ordner Ableitungsdaten. 

    Xcode Preference -> Location -> Derived Data
    /Users/YourMacName/Library/Developer/Xcode/DerivedData
    
  4. Reinigen Sie Ihr Projekt Shift + Command + Alt + K.

  5. Erstellen Sie Ihr Projekt Command + B.

94
Maria

Ich habe das Problem folgendermaßen gelöst:

  1. Gehe zu File > Workspace settings.
  2. Klicken Sie auf den kleinen Rechtspfeil neben "Abgeleitete Daten". Dadurch wird die Finder-App am Speicherort des Ordners DerivedData geöffnet.
  3. Gehen Sie in den Ordner DerivedData und löschen Sie den Ordner, der Ihrem Projekt entspricht.
  4. Beenden Sie Xcode und öffnen Sie es erneut.
  5. Bereinigen Sie Ihr Projekt shiftcommandk.
  6. bauen Sie Ihr Projekt commandb.
  7. Öffne dein Storyboard.
  8. Gehe zu Editor > Refresh all views.

aktualisiert

Manchmal hat einfach direkt Gehe zu Editor > Refresh all views geklappt. Wenn Refresh all views deaktiviert ist, beenden Sie Xcode und versuchen Sie es erneut.

61
mnemonic23

Ich lösche einfach die fehlerhafte Ansicht und drücke Befehl + Z, um das Löschen rückgängig zu machen. Für mich geht das.

Wenn die fehlerhafte Ansicht später bearbeitet wird, kann der Fehler erneut auftreten. Wiederholen Sie die oben genannten Schritte.

36
Ryan.Yuen

Ich habe dieses Problem in CocoaPod 1.5.0 gesehen. Die Lösung besteht darin, den Pod erneut zu installieren (Pod erneut zu installieren), wenn dieser Fehler angezeigt wird, oder Sie können stattdessen CocoaPod 1.4.0 verwenden. Es funktioniert gut in 1.4.0 (zumindest für mich.)

aktualisieren: 

Fügen Sie das folgende Skript in Podfile hinzu, um das Problem in 1.5.0 zu lösen

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

referenz: https://github.com/Skyscanner/SkyFloatingLabelTextField/issues/201#issuecomment-381915911

33
Jerome Li

Deaktivieren Sie 'Use Trait Variations' (Bereich Identität und Typ) für jede Xib-Datei, die Sie möglicherweise für benutzerdefinierte Ansichten haben, die in Ihrem Storyboard verwendet werden.

8
LatinCoder

mein Problem wurde gelöst, indem Ordner (die sich auf dieses Projekt beziehen) aus abgeleiteten Datenordnern gelöscht werden. Sie können dies tun, indem Sie auf Datei -> Projekteinstellung -> klicken und dann auf das Pfeilzeichen neben /Users/.../Xcode/DerivedData.__ klicken . Beenden Sie xcode, und öffnen Sie Ihr Projekt. Bereinigen Sie das Projekt mit diesem Schritt Product-> clean Erstellen Sie dann das Projekt: Product-> Build Dadurch werden diese Probleme behoben.

6
Mitu Vinci

Der folgende Code wurde meiner @IBDesignable-Klasse hinzugefügt.

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

Öffnen Sie einfach Ihr Storyboard -> Editor -> Alle Ansichten aktualisieren. Diese Arbeit für mich.

2

Beim Debuggen habe ich herausgefunden, dass es einige Klassen gibt, die die Benutzeroberfläche modifizieren. Typischerweise Marquelabel, das eine Unterklasse von UILabel oder eine andere Klasse ist, die UIView und UIliew zur Laufzeit zeichnet und mit der Autolayout-Engine kollidiert. Geben Sie für diese benutzerdefinierten Ansichten feste Breite oder Höhe an. Wenn sich das Problem dadurch nicht beheben lässt, versuchen Sie folgende Lösungen: - 

Lösung 1: - Kommentiere #use_frameworks in deiner Pod-Datei. 

Lösung 2: - Versuchen Sie, abgeleitete Daten zu löschen

  1. Schließen Sie das Editorfenster Ihres Xcodes und beenden Sie den Simulator -> 
  2. Gehen Sie zu Xcode-Einstellungen -> Standorte -> 
  3. Klicken Sie auf den kleinen grauen Pfeil, der den abgeleiteten Datenpfad zeigt -> 
  4. Wählen Sie Ihr Projekt aus -> 
  5. Löschen Sie alle Ordner in -> 
  6. Beenden Sie Xcode und öffnen Sie es erneut
2
Ashish Pisey

Derselbe Fehler: Hatte UITextField angepasst und den Interface Builder verwendet, war der Fehler in der Konsole -Verwendung des nicht implementierten Initialisierers 'init (frame :)' für die Klasse "CustomField"

Der Initialisierer wurde hinzugefügt, um den Fehler zu beheben

1
Avinash

In meinem Fall verwendete ich eine Bibliothek, die UIView subclassing war. Es verwendete IB_DESIGNABLE und der Aufruf von [super awakeFromNib] fehlte. Nachdem ich den Aufruf zu dieser Methode hinzugefügt habe, ist der Fehler behoben.

Ich bin mir nicht sicher, ob die Tatsache, dass IB_DESIGNABLE implementiert wurde, Auswirkungen darauf hatte.

0
AnthoPak

Ich hatte das gleiche Problem und kam hierher, um herauszufinden, was passiert ist. Ich bemerkte die Antwort mit der besten Bewertung und die Antwort selbst half mir nicht, da IBDesignable nicht im Protokollordner vorhanden war und ich bereits alle anderen Optionen dort ausprobiert hatte. In den Kommentaren bemerkte ich jedoch, dass jemand über eine Frame-Initition sprach.

Ich beschloss, meine IBDesignable-Erweiterung für UIView zu kommentieren, und das Problem wurde sofort behoben. Um dies zu beheben, suchen Sie die Erweiterung, die das Problem verursacht, und stellen Sie sicher, dass Sie die erforderlichen Dateien einrichten, indem Sie eine IBDesignable-Klasse erstellen und die erforderlichen Initialisierer wie folgt bereitstellen:

@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() {
}
}

WICHTIG: Denken Sie daran, die neue Klasse zu dem Element hinzuzufügen, auf dem Sie das Designable verwenden.

0
Nox

Ich hatte dieses Problem nach dem Update auf die neueste XCode-Version. Nachdem ich mehrere oben beschriebene Lösungen ausprobiert habe, habe ich nur Xcode ziemlich und dann das System heruntergefahren und es eingeschaltet und das hat bei mir funktioniert.

0
Mehsam Saeed

Ich habe es mit Clean versucht und das Projekt ausgeführt, kann dieses Problem nicht lösen.

Aber schließen und das Projekt wieder geöffnet.

0
Lal Krishna

Nachdem Sie die erforderlichen Änderungen vorgenommen haben, ändern Sie das Storyboard oder in meinem Fall eine .xib, um sie in "XCode 7" zu öffnen, zu speichern und zu schließen. Dies ist nur ein Stop Gap-Maß, um die Fehler zu beheben, aber am Ende müssen Sie sie beheben oder tun, bis Sie nicht mehr in der Lage sind.

0
Alberto Lopez

Für alle, die wie ich diese IBDesignablesAgentCocoaTouch-Datei nicht finden können oder beim Versuch, ausgewählte Ansichten im Editor zu debuggen, eine Fehlermeldung erhalten, gibt es eine andere Möglichkeit, die Fehler zu debuggen, bei denen das Rendern fehlgeschlagen ist.

Öffnen Sie die 'Terminal'-App, wählen Sie in der Seitenleiste Ihren aktuellen Mac aus (dieser wird wahrscheinlich standardmäßig automatisch ausgewählt) und suchen Sie dann in der Suchleiste nach "IBSceneUpdate" und drücken Sie die Eingabetaste. Jedes Mal, wenn Sie einen Xcode-Fehler für ein IBDesignable erhalten, das nicht gerendert werden kann, erhalten Sie auch einen neuen "IBSceneUpdate" -Eintrag mit weiteren Details zum Fehler. Zumindest konnte ich so meine IBDesignable Fehler debuggen!

 enter image description here 

0
Stelabouras

Wenn Sie eine XIB-Datei für die benutzerdefinierte Ansicht verwenden. Versuche dies:

Wechsel von

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

Zu:

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