2009-05-15 3 views
3

Ich versuche Brandon Walkin BWSplitView von BWToolkit in einem Cocoa PyObjc Projekt zu verwenden. Als ich führen Sie das Projekt, das ich die folgende Fehlermeldung erhalten:BWSplitView und PyObjc

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 zu sein, und ich plane, es an anderer Stelle in meiner Schnittstelle zu verwenden.

Antwort

5

ich vermute, dass Sie diesen Fehler bekommen, weil Sie eine BWSplitView in einer nib/xib Datei, die Sie zu laden versuchten hatte. Um die Objekte in einer NIB-Datei zu entpacken, muss die Runtime Instanzen der archivierten Klassen (z. B. BWSplitView) erstellen können. Die Ausnahme, die ausgelöst wird, liegt darin, dass BWSplitView für die Laufzeit nicht verfügbar ist. In einer Objective-C-Anwendung würden Sie eine Verknüpfung zum BWToolkit-Framework herstellen, und der dynamische Linker würde BWSplitView für die Laufzeit verfügbar machen. In einer PyObjC-Anwendung müssen Sie explizit Klassen importieren, die für die Laufzeit verfügbar sein sollen (die nicht im Hintergrund für Sie verknüpft sind, z. B. die Cocoa-Klassen). Glücklicherweise hat BWToolkit eine Bridge-Unterstützungsdatei, so dass Sie es direkt importieren können (vorausgesetzt, es befindet sich in einem Standard-Framework-Verzeichnis wie/Library/Frameworks). Wenn Sie ein Framework laden müssen, das keine Bridge-Unterstützungsdatei enthält, können Sie objc.loadBundle verwenden und dann NSClassFromString verwenden, um ein Klassenobjekt abzurufen.

Nebenbei bemerkt,/System/Library/Frameworks ist für Apple-Systemframeworks reserviert. Sie sollten keine Frameworks von Drittanbietern in diesen Ordner einfügen, da Apple diesen Ordner bei einem Systemupdate möglicherweise löscht (unwahrscheinlich, aber möglich). Threat-Party-Frameworks, die allen Benutzern auf einem System zur Verfügung gestellt werden, sollten in/Library/Frameworks, benutzerspezifische Frameworks ähnlich in ~/Library/Frameworks und anwendungsspezifischen Frameworks in Contents/Frameworks, innerhalb des App-Bundles der Anwendung, abgelegt werden.

+2

Und anwendungsspezifische Frameworks in (Ihr App-Bundle)/Inhalte/Frameworks. –

0

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 erfolgen der Ordner across)
3. Verwenden Sie import BWToolkitFramework in main.py

0

Wir hatten eine ähnliche Nachricht:

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

In unserem Fall ist es aufgrund eines Streu Eintritt in den „Rahmensuchpfaden“ unter dem Ziel der Build-Einstellungen Einstellung war. Als dieser Eintrag gelöscht wurde, ging das Problem weg.

Verwandte Themen