Метод не вызван в iOS

У меня есть следующий фрагмент, и вызов метода не работает!

@interface myVM(){ NSArray *results; } @property (nonatomic, strong) MyModel *model; @end @implementation myVM - (instancetype)initWithItems{ self = [super init]; if (!self) return nil; **[self.model loadInfo];** _DeviceNameArray = self.model.DeviceNames; }

В чем причина того, что метод не называется?

4 ответа

self.model не инициализируется. Если вы отлаживаете его, вы увидите, что он равен нулю.


Сначала вам необходимо выделить и инициализировать его:

- (instancetype)initWithItems{ self = [super init]; if (!self) return nil; self.model = [MyModel new]; // like this [self.model loadInfo]; _DeviceNameArray = self.model.DeviceNames; return self;
}


Вы должны структурировать свои собственные методы инициализации, подобные этому, для лучшей читаемости.

- (instancetype)initWithItems
{ self = [super init]; if (self) { [self.model loadInfo]; _DeviceNameArray = self.model.DeviceNames; } return self;
}

Проблема в том, что self.model не был инициализирован нигде. Это просто свойство, которое не содержит информации - оно равно nil. Вам где-то нужно что-то присваивать.

Например, передайте объект модели в качестве параметра, например, initWithItem:(MyModel *)model, затем назначьте его self.model.


К тому времени, когда вы вызываете [self.model loadInfo]; , свойство model еще не установлено и равно nil. Вы, вероятно, хотите что-то вроде:

- (instancetype)initWithModel:(MyModel *)aModel { self = [super init]; if (!self) return nil; self.model = aModel; [self.model loadInfo]; _DeviceNameArray = self.model.DeviceNames; return self;
}

licensed under cc by-sa 3.0 with attribution.