Метод не вызван в 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.