BWSplitView и PyObjc - PullRequest
       21

BWSplitView и PyObjc

3 голосов
/ 15 мая 2009

Я пытаюсь использовать BWSplitView Брэндона Уолкина из BWToolkit в проекте Cocoa PyObjc. Когда я запускаю проект, я получаю следующее сообщение об ошибке:

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

Означает ли это, что его инструментарий несовместим с проектом PyObc, поэтому я должен просто использовать представления конструктора интерфейса по умолчанию? BWToolkit, похоже, идеально подходит для моей программы, и я планирую использовать его в другом месте моего интерфейса.

Ответы [ 3 ]

5 голосов
/ 15 мая 2009

Я подозреваю, что вы получили эту ошибку, потому что у вас был BWSplitView в файле nib / xib, который вы пытались загрузить. Для разархивирования объектов в файле пера среда выполнения должна иметь возможность создавать экземпляры заархивированных классов (например, BWSplitView). Бросается исключение, потому что BWSplitView не доступен для среды выполнения. В приложении Objective-C вы будете ссылаться на платформу BWToolkit, а динамический компоновщик сделает работу BWSplitView доступной для среды выполнения. В приложении PyObjC вы должны явно импортировать классы, которые вы хотите сделать доступными для среды выполнения (которые не связаны за кулисами для вас, например, классы Какао). К счастью, в BWToolkit есть файл поддержки моста, так что вы можете импортировать его напрямую (при условии, что он находится в стандартном расположении фреймворка, например / Library / Frameworks). Если вам нужно загрузить фреймворк, у которого нет файла поддержки моста, вы можете использовать objc.loadBundle, а затем NSClassFromString, чтобы получить объект класса.

В дополнение к этому / System / Library / Frameworks зарезервировано для системных платформ Apple. Не следует помещать сторонние фреймворки в эту папку, так как Apple может стереть эту папку при обновлении системы (маловероятно, но возможно). Трехсторонние интегрированные среды, которые доступны всем пользователям в системе, должны быть помещены в / Library / Frameworks, пользовательские интегрированные среды аналогично в ~ / Library / Frameworks и специфичные для приложения интегрированные среды в Contents / Frameworks, которые находятся в комплекте приложения.

0 голосов
/ 20 ноября 2009

У нас было похожее сообщение:

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

В нашем случае это произошло из-за случайной записи в настройке «Paths Path Framework» в настройках сборки цели. Когда эта запись была очищена, проблема исчезла.

0 голосов
/ 15 мая 2009

Я исправил это, используя следующие шаги:
1. Загрузите и установите http://github.com/jrydberg/pyobjc-bwtoolkitframework/tree/master
2. Убедитесь, что BWToolkit.framework установлен в / System / Library / Frameworks (это можно сделать, заново загрузив BWToolkit и скопировав папку)
3. Используйте импорт BWToolkitFramework в main.py

...