Метод класса (тип NSString), вызываемый из viewcontroller, возвращает nil? - PullRequest
0 голосов
/ 15 января 2011

Я программист на С ++, новичок в Objective-C.

Я создал приложение калькулятора, которое работает нормально, используя одно представление.У меня есть класс вычислений и ViewController.Каждый раз, когда нажимается кнопка, метод IBAction в ViewController вызывает методы, определенные в классе Calculations, для обработки ввода и возвращает вывод в виде строки NSSt, которую я затем устанавливаю в качестве значения поля label.text.

Сейчас я работаю над приложением панели вкладок, используя тот же класс вычислений.Это приложение имеет две вкладки, каждая с уникальным набором кнопок ввода для калькулятора (оба представления имеют одни и те же данные ввода / вывода).Первая вкладка идентична моему первому приложению с единым представлением, поэтому я пытаюсь сделать это аналогичным образом.

Вот проблема:

Когда нажата кнопка,Метод IBAction, который обрабатывает ввод, проходит через вызовы методов класса Calculations (показанных ниже) без ошибок:

-(IBAction)readInput:(id)sender {    
    [_calculations input:[sender titleForState:UIControlStateNormal]];
    inputField.text = [_calculations inputDisplay];
    outputField.text = [_calculations outputDisplay];
}

однако методы inputDisplay и outputDisplay возвращают nil.Используя отладчик, я заметил, что не могу «войти» в вызовы методов _calculations, вместо этого строка пропускается, и значение, возвращаемое обоими, равно nil.Я добавил следующий метод:

-(IBAction)setNumber:(id)sender {
    NSString *button =(NSString *)[sender titleForState:UIControlStateNormal];
    inputField.text = button;
}

и, если я прикреплю его к кнопкам ввода, я смогу увидеть обновленный дисплей.Похоже, что это проблема с вызовом функций-членов _calculations и представлений панели вкладок (поскольку эта проблема отсутствует при использовании одного представления).

Я понимаю, что упустил много информации, но я сделал это, чтобы не предоставлять нерелевантную информацию.Я предоставлю все детали, которые необходимы, если спросят.

Ответы [ 2 ]

1 голос
/ 15 января 2011

Убедитесь, что _calculations не ноль.

Вы можете отправить любое сообщение (вызвать любой метод) на nil, и оно просто вернет nil, не вызывая исключения.

0 голосов
/ 15 января 2011

Не видя больше кода, его будет сложно диагностировать.

Если бы я пытался отладить эту проблему, я бы сначала удостоверился, что _calculations указывает на объект, на который вы хотите, чтобы он указывал. Если он загружен из NIB, он может не инициализироваться и все равно быть нулевым. Вы можете отправлять сообщения на ноль объектов без каких-либо проблем. Если объект получает сообщение, которое он не может обработать (метод не существует или целевой объект равен nil), тогда возвращение для этого вызова будет равно nil.

В прошлом я помещал код инициализации в метод init: и тратил несколько часов, почему его не вызывали, пока не понял, что мне нужно поместить код инициализации в viewDidLoad: или initWithNibName: bundle: или даже initWithCoder: селектор.

HTH, Matt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...