3

CocoaPyObjcプロジェクトでBWToolkitのBrandonWalkinのBWSplitViewを使用しようとしています。プロジェクトを実行すると、次のエラーメッセージが表示されます。

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

これは、彼のツールキットがPyObcプロジェクトと互換性がないことを意味するので、デフォルトのInterface Builderビューを使用する必要がありますか?BWToolkitは私のプログラムにはかなり完璧に思えますが、インターフェイスの他の場所で使用する予定です。

4

3 に答える 3

5

ロードしようとしたnib/xibファイルにBWSplitViewがあったため、このエラーが発生したと思われます。nibファイル内のオブジェクトをアーカイブ解除するには、ランタイムがアーカイブされたクラスのインスタンス(BWSplitViewなど)を作成できる必要があります。スローされる例外は、ランタイムでBWSplitViewを使用できないためです。Objective-Cアプリでは、BWToolkitフレームワークにリンクし、ダイナミックリンカーがBWSplitViewをランタイムで利用できるようにする作業を行います。PyObjCアプリでは、ランタイムで使用できるようにするクラス(Cocoaクラスなどのバックグラウンドでリンクされていないクラス)を明示的にインポートする必要があります。幸い、BWToolkitにはブリッジサポートファイルがあるため、直接インポートできます(/ Library / Frameworksなどの標準のフレームワークの場所にあると想定しています)。objc.loadBundle次に、を使用NSClassFromStringしてクラスオブジェクトを取得します。

ちなみに、/ System / Library / Frameworksは、Appleが提供するシステムフレームワーク用に予約されています。Appleはシステムアップデート時にそのフォルダをワイプする可能性があるため、サードパーティのフレームワークをそのフォルダに配置しないでください(可能性は低いですが可能です)。システム上のすべてのユーザーが利用できるサードパーティのフレームワークは/Library/ Frameworksに、ユーザー固有のフレームワークは同様に〜/ Library / Frameworksに、アプリケーション固有のフレームワークはContents/Frameworksに配置する必要があります。

于 2009-05-15T17:51:02.250 に答える
0

同様のメッセージがありました:

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

私たちの場合、それはターゲットのビルド設定の下にある「フレームワーク検索パス」設定の迷いエントリが原因でした。そのエントリがクリアされると、問題は解決しました。

于 2009-11-20T03:20:31.113 に答える
0

次の手順を使用してこれを修正しました。 1. http://github.com/jrydberg/pyobjc-bwtoolkitframework/tree/master
をダウンロードしてインストールします 。 BWToolkit を再ダウンロードしてフォルダーをコピーすることで実行できます) 3. main.py で import BWToolkitFramework を使用します。

于 2009-05-15T17:42:51.893 に答える