python и objc bridge в существующем приложении

1

Я снова начал программировать в objc, и я блуждал, как я могу использовать код python в существующем приложении objc. Я нашел некоторые темы на этом сайте и некоторые другие, но они не помогли мне вообще. Я хочу сделать SpotlightAPI, найденный в веб-сайте разработчика Apple, и использовать результаты для обработки их с помощью кода python. До сих пор я делал следующее:
1. Скачал SpotlightAPI из apple
2. создал новый проект на основе шаблона приложения cocoa -python от PyObjc
3. добавили файлы контроллера из SpotlightAPI в PyObjC
4. Настроил привязки так же, как в SpotlightAPI
5. Выполняется программа и все работает успешно
6. создал новый файл класса python, который наследуется от NSObject (называемый python.py)
7. файл python имеет следующий код:

from Foundation import *
import objc

NSObject = objc.lookUpClass(u"NSObject")
print "PYTHON VERSION BEING USED:"

class Python(NSObject):
    def sendit_(self, something):
        print something
        return "asdf"


8. Я вставил этот код в начало файла Controller.m:

@class Python;

@interface NSObject (MethodsThatReallyDoExist)
-(NSString *) sendit: (id) aString;

@end

@implementation Controller
- (id)init
{
    self = [super init];
    Class pythonClass = NSClassFromString(@"Python");
    myPython = [pythonClass new];
    NSLog(@"Created PythonClass: %@", myPython);
    NSString * oneString = [myPython sendit:@"asdf"];
    NSLog(@"%@", oneString);
    return self;
}


9. добавлен id *myPython; в объявления переменных в файле Controller.h

10. реализовал метод sendit в файле controller.m следующим образом:

- (NSString *) sendit:(id) aString
{

    return [myPython sendit:aString];
}


он компилируется и запускается успешно, но консольное сообщение, которое я получаю от функции init: Created PythonClass: (null), а также строка возвращает следующий журнал (null)

кто знает, что я делаю неправильно?

Теги:
pyobjc

1 ответ

0

В коде, который вы указали, есть несколько сомнительных вещей. Во-первых, вы должны иметь id myPython not id *myPython, поскольку id уже является указателем. Во-вторых, вы объявляете метод в категории NSString, но реализуете его в подклассе. Как правило, вы хотите реализовать метод в реализации категории в том же классе (NSObject в этом случае). В-третьих, все его бит-циркуляр имеет sendit как метод в NSObject, который при реализации вызывает sendit на myPython, который также является NSObject. Я удивлен, что он компилируется и не разбивается. Попытайтесь очистить эти проблемы и посмотреть, где вы находитесь. Надеюсь, это поможет!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню