Невозможно вызвать метод Objective C из функции C

Я использую архитектуру MVC для приложения GUI. Класс модели имеет некоторые C-функции. Одна из функций C вызывает некоторые методы classа Objective-C. Я вызываю эти методы, используя объект этого classа. Странная вещь заключается в том, что методы, ранее используемые для метода xyz, называются отлично, но когда этот метод xyz вызывается, этот метод и методы после него не выполняются. У меня нет ошибок. Так что не могу понять, что именно происходит. Любые идеи относительно того, что может быть причиной этого?

Как указывает Марк, вы, вероятно, используете ссылку на объект 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-методе

  • Зачем использовать слабый указатель для делегирования?
  • Objective-C enumerateUsingBlock против быстрого enums?
  • Как передать значения по ссылке в объекте C (iphone)
  • Можно ли использовать isKindOfClass: против экземпляра NSString для определения типа?
  • Что означает символ @ в объективе-c?
  • Как проверить, какой class является объектом Objective-C?
  • Неформальный протокол В объективе-C?
  • В чем разница между '->' (оператор стрелки) и '.' (оператор точки) в Objective-C?
  • Переменная classа, определенная в @implementation, а не @interface?
  • Отправка сообщения в ноль в Objective-C
  • Есть ли буквальный синтаксис словаря или массива в Objective-C?
  • Давайте будем гением компьютера.