Когда этот код выполняется:
int x = [model check:3];
model
- это nil
. В Objective-C сообщения, отправленные на nil
, ничего не делают и возвращают 0
. Итак, как видите, x
- это 0
, а -check:
никогда не вызывается.
Очевидно, вы ожидали, что этот метод будет вызван автоматически:
- (testBrain *)model
{
if (!model) {model = [[testBrain alloc] init];}
return model;
}
Однако этот метод будет вызываться только в том случае, если вы сделаете это самостоятельно, сказав [self model]
или self.model
. Итак, эта строка исправит это:
int x = [[self model] check:3];
Попробуйте и посмотрите.
Пройдем немного дальше: было бы яснее полностью удалить метод model
и создать переменную экземпляра model
при создании UIViewController
. Таким образом, мы можем гарантировать, что model
действителен в любое время, когда выполняется любой код в классе testMethodViewController
.
Это можно сделать, переопределив инициализатор UIViewController
:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Now you can initialize your instance variables
model = [[testBrain alloc] init];
}
return self;
}