Невозможно вызвать метод Objective C из функции C
Я использую архитектуру MVC для приложения GUI. Класс модели имеет некоторые C-функции. Одна из функций C вызывает некоторые методы classа Objective-C. Я вызываю эти методы, используя объект этого classа. Странная вещь заключается в том, что методы, ранее используемые для метода xyz, называются отлично, но когда этот метод xyz вызывается, этот метод и методы после него не выполняются. У меня нет ошибок. Так что не могу понять, что именно происходит. Любые идеи относительно того, что может быть причиной этого?
- Возможно ли NSLog () без маркировки времени и даты и автоматической новой строки?
- Объектно-C-точечная нотация с помощью методов classа?
- В чем разница между valueforKey :, objectForKey :, и valueForKeyPath :?
- Разница между категорией и расширением classа?
- Объектив C Эквивалент «переменных переменных» PHP
- Регулярные выражения в приложении Cocoa Objective-C
- В чем разница между синтаксисом точек и синтаксисом квадратной скобки?
- Различия между сильными и слабыми в Objective-C
Как указывает Марк, вы, вероятно, используете ссылку на объект OBJC, который не инициализирован вне области Object-C.
Вот рабочий пример кода C, вызывающего метод объекта ObjC:
#import id refToSelf; @interface SomeClass: NSObject @end @implementation SomeClass - (void) doNothing { NSLog(@"Doing nothing"); } @end int otherCfunction() { [refToSelf doNothing]; } int main() { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; SomeClass * t = [[SomeClass alloc] init]; refToSelf = t; otherCfunction(); [pool release]; }
Вы можете определенно запускать методы объектов Obj-C из C-функции, поэтому, вероятно, в какой-то момент в вашем коде есть ошибка. Если бы я должен был догадаться, это звучит так, как если бы вы не ожидали, что объект будет нулевым. Обычно вы начинаете с установки контрольных точек в своей функции, чтобы вы могли узнать, что такое состояние объектов.
Точка останова в методе перед xyz, а затем начать одиночный шаг в отладчике. Его удивительное количество ошибок, которые вы можете обнаружить, одним нажатием кода в отладчике. Фактически, это на самом деле рекомендуемый метод избегания ошибок, чтобы всегда выполнять один шаг через код для любого нового кода, который вы пишете.
Я согласен с Марком, classическая причина «этого метода и методов после того, как он не выполняется» заключается в том, что ссылка на объект равна нулю, поскольку [nil doAnything] ничего не делает и не сообщает об ошибке.
Это простой способ сделать это:
@implementation // Define a object ClassName *thisClass;
и затем начать с себя
thisClass = self;
Вы можете использовать любые var и методы в C-методе