Frage

Ich versuche, Brandon Walkin der BWSplitView von BWToolkit in einem Cocoa PyObjC Projekt zu verwenden. Als ich das Projekt ausführen bekomme ich folgende Fehlermeldung:

NSInvalidUnarchiveOperationException - *** -[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class (BWSplitView)

Bedeutet dies, seine Toolkit mit einem PyObc Projekt nicht kompatibel ist, also soll ich nur die Standard-Interface Builder Ansichten verwenden? BWToolkit scheint ziemlich perfekt für mein Programm, und ich plane es in meiner Schnittstelle an anderer Stelle zu verwenden.

War es hilfreich?

Lösung

Ich vermute, dass Sie diesen Fehler bekommen, weil Sie eine BWSplitView in einer nib / xib Datei hatten, die Sie zu laden versuchen. Um die Objekte in einer Nib-Datei aus dem Archiv entfernen, muss die Laufzeit der Lage sein, Instanzen der archivierten Klassen zu erstellen (z BWSplitView). Die Ausnahme, die ausgelöst wird, ist, weil BWSplitView auf die Laufzeit nicht zur Verfügung steht. In einem Objective-C App würden Sie auf den BWToolkit Rahmen verknüpfen und die dynamischen Linker an die Laufzeit, die Arbeit machen BWSplitView verfügbar machen würden. In einer PyObjC App, müssen Sie explizit Klassen importieren, die Sie auf die Laufzeit zur Verfügung stehen sollen (die hinter den Kulissen für Sie nicht verbunden sind, wie die Cocoa-Klassen). Glücklicherweise hat BWToolkit eine Brücke Support-Datei, so dass Sie es direkt importieren können (es ist in einer Standard-Framework Lage unter der Annahme, wie / Library / Frameworks). Wenn Sie einen Rahmen laden müssen, die nicht eine Brücke Support-Datei verfügt, können Sie objc.loadBundle verwenden und dann NSClassFromString verwenden, um ein Objekt der Klasse zu bekommen.

Auf einer Seite zur Kenntnis, / System / Library / Frameworks ist für Apple mitgelieferten Systemrahmen vorbehalten. Sie sollen nicht Drittanbieter-Frameworks in diesem Ordner abgelegt wie Apple, dass Ordner in einem System-Update wischen kann (unwahrscheinlich, aber möglich). Thrid-Party-Frameworks, die für alle Benutzer auf einem System zur Verfügung gestellt werden sollte in / Library / Frameworks, benutzerspezifischen Rahmenbedingungen in ähnlicher Weise in ~ / Library / Frameworks und anwendungsspezifische Rahmenbedingungen Inhalt / Frameworks eingesetzt werden, wo innerhalb der App-Bundle der Anwendung.

Andere Tipps

Ich reparierte habe dies mit den folgenden Schritten:
 1. Downloaden und installieren http://github.com/jrydberg/pyobjc-bwtoolkitframework/tree / Master
 2. Stellen Sie sicher, Sie haben BWToolkit.framework installiert in / System / Library / Frameworks (dies kann durch redownloading BWToolkit und kopieren Sie den Ordner über erfolgen)
3. Verwenden Sie import BWToolkitFramework in main.py

Wir hatten eine ähnliche Meldung:

*** Terminating app due to uncaught exception ‘NSInvalidUnarchiveOperationException’, reason: ‘*** -[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class (MKMapView)’

In unserem Fall war es aufgrund eines Streu Eintritt in den „Rahmensuchpfaden“ -Einstellung im Rahmen des Build-Einstellungen des Ziels. Wenn dieser Eintrag gelöscht wurde, das Problem ging weg.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top