2010-05-24 2 views
1

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

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]; 
} 


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

ответ

0

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

Смежные вопросы