提问人:tentmaking 提问时间:1/27/2017 最后编辑:tentmaking 更新时间:1/31/2017 访问量:103
传递对象时数据丢失
Data Loss When Passing Object
问:
我有一个对象
@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)会变为 nil?似乎该对象正在执行浅拷贝而不是深拷贝,但不确定。
似乎有一些我不知道的基础。
答:
0赞
Alex
1/27/2017
#1
我认为您需要先初始化子类 NSObject。在文件中,您可以重写 init 方法。像这样的东西:QuestionViewModel
QuestionViewModel.m
- (id)init {
if((self = [super init])) {
// Set whatever init parameters you need here
}
return self;
}
然后,在尝试使用此方法的类中,只需调用:
-(void)viewDidLoad {
QuestionViewModel *currentQuestion = [[QuestionViewModel alloc] init];
}
评论
0赞
tentmaking
1/27/2017
我实现了这个,但它没有区别。这些属性仍然为零。不过,修复的尝试很好。
0赞
tentmaking
1/31/2017
#2
我最终更改了模型以更紧密地反映链表。当我存储上一个和下一个对象时,它很接近,但我最终更改了上一个和下一个属性来存储对象的索引,而不是实际对象。
@property (nonatomic, assign) NSInteger nextQuestionIndex;
@property (nonatomic, assign) NSInteger previousQuestionIndex;
评论
0赞
Willeke
1/31/2017
您确实存储了地址。 是一个指针。QuestionViewModel *
上一个:按指针调用和按值 C 调用
评论
question
currentQuestion
nextQuestion
self.currentQuestion
self.currentQuestion.nextQuestion
self.currentQuestion.nextQuestion.nextQuestion