У меня есть проект Objc-C, в котором я хотел бы обрабатывать некоторые данные через Python. Для этого я решил реализовать подкласс PyObjc NSObject, который я бы затем связал с моими классами Obj-C через конструктор интерфейса.
Я добавил фреймворк Python в свой проект и файл python со следующим простым кодом:
import objc
from Foundation import *
from AppKit import *
class PythonWrapper(NSObject):
def applicationDidFinishLaunching_(self, sender):
NSLog("Application did finish launching.")
Я создал экземпляр PythonWrapper в своем XIB (строитель автоматически узнал его имя). Но при создании, даже не связав его уже с другими классами, я получаю следующую проблему:
Игнорирование файла /Developer/SDKs/MacOSX 10.6.sdk/Library/Frameworks//Python.framework/Python, отсутствие требуемой архитектуры x86_64 в файле
Кроме того, журнал xCode также показывает:
Неизвестный класс 'PythonWrapper', используя вместо этого 'NSObject'. Обнаружен в файле Interface Builder по пути /Users/joao/Library/Developer/Xcode/DerivedData/Jalioneiro -ekjwzbkqqgpyekadkyebhgdsjcxo/Build/Products/Debug/Jalioneiro.app/Contents/Resources/en.lproj/Interface.nib.
Что мне здесь не хватает? Есть ли другой способ связать код python с моими классами Obj-C?
Примечание: Я работаю над xCode4
Я слышал, что Xcode 4 не играет так хорошо с PyObjC, но я все еще использую 3, поэтому я не могу быть уверен.
Причиной вашей второй ошибки (и это укусит меня все время) является то, что вам нужно импортировать свои пользовательские классы в свой проект main.py:
#import modules required by application
import objc
import Foundation
import AppKit
from PyObjCTools import AppHelper
# import modules containing classes required to start application and load MainMenu.nib
import MyAppDelegate
import MyCustomView
import MyArrayController
# pass control to AppKit
AppHelper.runEventLoop()
Первая ошибка выглядит так, будто вы пытаетесь создать приложение с 64-разрядной версией. PyObjC, который поставляется с Snow Leopard, только скомпилирован как 32-разрядный (фактически, я думаю, что то же самое относится к Python по умолчанию). Попробуйте переключить свою архитектуру построения цели на 32-разрядный или 32/64-разрядный Universal. Вы также можете пойти по пути повторной компиляции PyObjC и включить его в свой пакет приложений - сами не пробовали.