webentwicklung-frage-antwort-db.com.de

Instanz von IB Designables konnte nicht gerendert werden

Ich habe ein gemischtes dynamisches Framework von Objective-C und Swift. Das gemischte Framework wurde mit zwei reinen dynamischen Objective-C-Frameworks verknüpft.

Wenn ich versuchte, eine Klasse im gemischten Rahmen mit IB Designable zu markieren und diese Klasse entweder im Storyboard oder in der Feder zu verwenden, sagt der Xcode immer, dass die Instanz davon nicht gerendert werden konnte.

Und da war die Fehlermeldung:

IB Designables: Instanz von WZUITokenField konnte nicht gerendert werden: dlopen (WZUIKit.framework, 1): Bibliothek wurde nicht geladen: /Library/Frameworks/WZFoundation.framework/WZFoundation Referenziert von: WZUIKit.framework Grund: Bild nicht gefunden

IB Designables: Fehler beim Aktualisieren des Auto-Layout-Status: dlopen (WZUIKit.framework, 1): Bibliothek wurde nicht geladen: @ rpath/WZFoundation.framework/WZFoundation Referenziert von: WZUIKit.framework Grund: Bild nicht gefunden

Das Framework WZUIKit ist ein gemischtes Objective-C- und Swift-Framework und die WZFoundation ist reines Objective-C.

Alle diese Funktionen funktionieren entweder auf dem Gerät oder dem Simulator.

55
WeZZard

Schließlich habe ich dieses Problem behoben, indem ich $(CONFIGURATION_BUILD_DIR) im Feld Runpath Search Paths der Build-Einstellungen des Ziels hinzugefügt habe.

Außerdem gibt es einige zusätzliche Schritte, die Sie möglicherweise mit Ihrem Xcode ausführen müssen.

  1. Löschen Sie die von Xcode abgeleiteten Daten für das Projekt. Sie sind in ~/Library/Developer/Xcode/DerivedData
  2. Reinigen Sie Ihren aktuellen Build, indem Sie auf drücken K
  3. Bauen Sie Ihr Projekt
  4. Gehen Sie im Storyboard zum Menü Editor und führen Sie Refresh All Views aus. Warten Sie, bis der Build abgeschlossen ist und die Fehler behoben sind

Gutschrift an @Mojtaba

76
WeZZard

Wenn Sie dasselbe Problem beim Erstellen einer Mac-App haben, wurde dies durch das Hinzufügen von @loader_path/../Frameworks zu Runpath Search Paths behoben.

15
Alex Young

für mich funktioniert es, xcode zu schließen und wieder zu öffnen. Keine Fehler nach ... Danke.

13
Gabriel

Interessant.

Erstens brachte mich WeZZards Antwort in die richtige Richtung, war aber nicht genau meine Lösung.

In meinem iOS-Projekt hatte etwas das Feld Runpath Search Paths in meinem Ziel überschrieben. Es sah so aus:

LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";

Ich versuchte seine Lösung, die $(CONFIGURATION_BUILD_DIR) hinzuzufügen, aber es funktionierte nicht für mich. Da es nicht funktionierte, habe ich aus Konfigurationsgründen den Konfigurationseintrag gelöscht (zurück zu den Standardeinstellungen des Projekts). Wenn ich es tat, stellte es sich auf folgendes zurück:

LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'

wenn ich in meine xcconfig-Dateien grabe, scheint das von den Cocoapods zu kommen.

Es scheint genau wie bei Alex, dass der @loader_path der Schlüssel ist, aber unter iOS ist der Pfad etwas anders als bei Mac OS X.

4
hsoi

Ich hatte dasselbe Problem In Xcode 6.4 wurden diese Fehler durch Hinzufügen einer Testzielmitgliedschaft zum Storyboard behoben. 

Mein Testziel hat @loader_path/Frameworks in Runpath Search Paths als Testziel festgelegt und nicht im ursprünglichen Ziel.

enter image description here

4
CalZone

Ich habe gerade einen anderen Grund in meinem Fall herausgefunden: 

Bei der Verwendung von 'Editor -> Ausgewählte Ansichten debuggen' habe ich gesehen, dass es abgestürzt ist, weil ich mit CoreGraphics ein Bild erstellt und als Hintergrundbild für eine Schaltfläche verwendet habe:

class func imageWithColor(color: UIColor, size: CGSize) -> UIImage {

    let rect = CGRectMake(0.0, 0.0, size.width, size.height);
    UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0);
    let context = UIGraphicsGetCurrentContext();    // It's alraedy nil here :(

    CGContextSetFillColorWithColor(context, color.CGColor);
    CGContextFillRect(context, rect);

    let image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;

}

Der Grund ist einfach, dass die Größe (0,0, 0,0) ist. Warum das? ich rufe an

super.setBackgroundImage(UIImage.imageWithColor(bgColor, size: self.bounds.size), forState: .Normal)

Aber in IB ist self.bounds.size an dieser Stelle noch 0! Also habe ich eine Zeile geändert:

let rect = CGRectMake(0.0, 0.0, max(size.width, 1.0), max(size.height, 1.0));

Und jetzt funktioniert es :)

Apple sollte eine Liste mit Dos and Don'ts in Bezug auf die IB bereitstellen ...

3
benjamin.ludwig

Ich habe dies auch auf einem Mac-Projekt und Xcode 7.3.1 erlebt. In meinem Fall war das in der Fehlermeldung "Fehler beim Rendern" referenzierte Framework überhaupt nicht mit dem Zeichnen verbunden. 

Wechseln Sie einfach zur Registerkarte Allgemeines/Verknüpfte Frameworks und Bibliotheken des Ziels und ändern Sie den Status des betroffenen Frameworks von Erforderlich in Optional. Dadurch können IBDesignables in IB ordnungsgemäß aktualisiert und gezeichnet werden.

optionaler Status

2
Doug Hanson

Ich hatte dieses Problem in einem OS X-Projekt.

In meinem Fall war das Problem ein altes Projekt ( NMSSH ), das ein Framework-Ziel mit fehlerhaften Build-Einstellungen enthielt. Speziell:

  • INSTALL_PATH wurde auf @executable_path/../Frameworks eingestellt, die korrekte Einstellung ist jedoch /Library/Frameworks.
  • SKIP_INSTALL wurde nicht festgelegt und ist standardmäßig auf NO eingestellt, aber die korrekte Einstellung ist YES
  • DYLIB_INSTALL_NAME_BASE wurde nicht festgelegt, aber die korrekte Einstellung ist @rpath

Beachten Sie, dass alle korrekten Einstellungen das sind, was Sie automatisch für ein neu erstelltes Framework-Ziel erhalten.

Nachdem Sie die Einstellungen auf die korrekten Werte geändert hatten, konnte Xcode meine @IBDesignable-Ansicht in das Storyboard laden.

1
rob mayoff

In meinem Fall habe ich die nächste in den initWithFrame/initWithCoder-Methoden ausgeführt, um die Ansicht zu erstellen:

className = NSStringFromClass([self class]);
self.view = [[[NSBundle mainBundle] loadNibNamed:className owner:self options:nil] firstObject];

Aber es sieht so aus, als sollte ich nicht das Main Bundle verwenden, sondern das Bundle der Klasse. Also habe ich diesen Code für Folgendes ersetzt und es hat funktioniert:

bundle = [NSBundle bundleForClass:[self class]];
className = NSStringFromClass([self class]);
self.view = [[bundle loadNibNamed:className owner:self options:nil] firstObject];

Ich dachte, vielleicht könnte das jemandem helfen.

1
jmoukel

Abgeleitete Daten löschen. Beenden Sie Xcode.

0
Vineesh TP

In meinem Fall im privaten Pod. Xcode Version 10.3 (10G8) produce rendering error

Die Auswahl ist in meinem Fall sehr einfach - Ich vergesse nur public zwischen @IBInspectable var

richtige Variante:

import UIKit

@IBDesignable public class BorderedView: UIView {
    @IBInspectable public var borderColor: UIColor? = UIColor.white {
        didSet {
            if let actualColor = borderColor {
                layer.borderColor = actualColor.cgColor
            } else {
                layer.borderColor = UIColor.white.cgColor
            }

            setNeedsDisplay()
        }
    }
    @IBInspectable public var borderWidth: CGFloat = 1 {
        didSet {
            layer.borderWidth = borderWidth
            setNeedsDisplay()
        }
    }
}

P .: Editor -> Ausgewählte Ansichten debuggen hat in meinem Fall nichts gebracht

S. 2: AlignedCollectionViewFlowLayout-Pod von der Abhängigkeit meines privaten Pods und definitiv nicht relevant für dieses Problem.

P.S.3: Problem noch hier

0
WINSergey

Ich habe diesen Fehler in einem Framework mit IBDesignables gefunden.

Ich musste $(FRAMEWORK_SEARCH_PATHS) zur LD_RUNPATH_SEARCH_PATHS-Einstellung in meinem Framework-Ziel hinzufügen.

Nach dem Aktualisieren der Runpath-Einstellung, dem Erstellen und Aktualisieren der Ansicht im Storyboard wurde der Fehler behoben. Musste den Build-Ordner nicht einmal bereinigen.

 enter image description here

0
Scott Marchant

Ich hatte einen ähnlichen Fehler, der durch die Ansichten meines Frameworks verursacht wurde, die keine öffentlichen Initialisierer hatten:

public override init(frame: CGRect) {
    super.init(frame:frame)
    commonInit()
}

required public init(coder: NSCoder) {
    super.init(coder: coder)
    commonInit()
}
0
Leon

Befolgen Sie die folgenden Schritte:

  1. Wenn Konflikte im Storyboard vorhanden sind, lösen Sie diese richtig, und überprüfen Sie, ob die XML-Datei richtig geprüft wurde. (Dies ist der Hauptschritt.)
  2. Reinigen Sie das Projekt.
  3. Löschen Sie den abgeleiteten Datenordner.
  4. Beenden Sie Xcode und starten Sie es erneut. (Ich musste das zweimal machen.)
0
komall