0

У меня есть объектпотери данных при переходе объекта

@interface QuestionViewModel : NSObject 

@property (nonatomic, assign) NSInteger questionId; 
@property (nonatomic, strong) NSString *questionText; 
@property (nonatomic, assign) NSInteger questionNumber; 
@property (nonatomic, strong) NSArray *choices; 

@property (nonatomic, strong) QuestionViewModel *nextQuestion; 
@property (nonatomic, strong) QuestionViewModel *previousQuestion; 

@end 

Я знаю, когда я заполнить этот объект является успешным и все свойства полностью и правильно инициализированы.

Однако, когда я прохожу этот объект так:

* Это другой класс (не в NSObject определено выше).

@property (nonatomic, strong) QuestionViewModel *currentQuestion; 

- (void)nextQuestion 
{ 
    [self loadQuestion:self.currentQuestion.nextQuestion]; 
} 

- (void)loadQuestion:(QuestionViewModel *)question 
{ 
    self.currentQuestion = question; 
    . 
    . 
    . 
} 

question.nextQuestion и question.previousQuestion являются nil.

Почему при передаче этого объекта последующие объекты (nextQuestion и previousQuestion) становятся нулевыми? Похоже, что объект делает мелкую копию, а не глубокую копию, но не уверен.

Кажется, что есть что-то основополагающее, о котором я не знаю.

+1

Объект не копируется вообще. 'question' указывает на вопрос, и этот указатель присваивается' currentQuestion'. Проверьте в 'nextQuestion' значения' self.currentQuestion', 'self.currentQuestion.nextQuestion' и' self.currentQuestion.nextQuestion.nextQuestion'. – Willeke

+0

self.currentQuestion.nextQuestion.nextQuestion - это нуль. self.currentQuestion.nextQuestion действителен для первого вопроса в списке, но для всех остальных вопросов. – tentmaking

+0

Я думаю, что тот факт, что вы создаете свойства (nextQuestion, previousQuestion) того же самого объекта, что он сам (QuestionViewModel), создает какую-то рекурсивную проблему. Это довольно запутанно, как стратегия. Может быть, лучше хранить nextQuestion и previousQuestion в качестве отдельных экземпляров класса и соответствующим образом обновлять их в любом классе, который вы им создаете? – Alex

ответ

0

Я думаю, что вам нужно сначала инициализировать NS0bject sub-class QuestionViewModel NSObject. В файле QuestionViewModel.m вы можете переопределить метод init. Что-то вроде этого:

- (id)init { 
    if((self = [super init])) { 
     // Set whatever init parameters you need here 
    } 
    return self; 
} 

Тогда, в классе, где вы пытаетесь использовать этот метод просто называют:

-(void)viewDidLoad { 
    QuestionViewModel *currentQuestion = [[QuestionViewModel alloc] init]; 
} 
+0

Я реализовал это, но это не изменило ситуацию. Свойства по-прежнему становятся нулевыми. Хорошая попытка исправить. – tentmaking

0

Я в конечном итоге изменение модели более точно отражать связный список. Он был близок, поскольку я хранили предыдущие и следующие объекты, но в итоге я изменил предыдущие и следующие свойства, чтобы сохранить индекс объекта, а не фактический объект.

@property (nonatomic, assign) NSInteger nextQuestionIndex; 
@property (nonatomic, assign) NSInteger previousQuestionIndex; 
+0

Вы сохранили адрес. 'QuestionViewModel *' - указатель. – Willeke

 Смежные вопросы

  • Нет связанных вопросов^_^