传递对象时的数据丢失

时间:2017-01-26 21:56:32

标签: objective-c pass-by-reference pass-by-value nscopying pass-by-pointer

我有一个对象

@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.nextQuestionquestion.previousQuestionnil

为什么当我传递这个对象时后续对象(nextQuestion和previousQuestion)变为零?看起来这个对象正在做一个浅拷贝,而不是深拷贝,但不确定。

似乎有一些基本的东西我不知道。

2 个答案:

答案 0 :(得分:0)

我认为您需要首先初始化您的子类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];
}

答案 1 :(得分:0)

我最终更改模型以更接近地反映链接列表。当我存储上一个和下一个对象时它很接近,但我最后更改了上一个和下一个属性来存储对象的索引,而不是实际的对象。

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