0
我正在使用一些与CoreData交互的现有代码。我做了一些改变,后来我实现了一个回归。我能够隔离引入问题的代码行,但是我不能理解为什么它是一个问题。CoreData不返回更新值
该代码涉及阅读文章并将其标记为已读。我没有对标记代码进行任何更改,并确定它仍能正常工作。然而,在天色读文章的列表的代码的另一层,我提出了以下变化:
//Old
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
...
[self retrieveReadArticles];
...
}
- (void)retrieveReadArticles {
userHistory = [UserHistory retrieveUserHistory]; //stored in iVar
self.readArticles = userHistory.readArticles;
}
上述工程的罚款,并给了我读文章的更新列表。
//New
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
...
[self retrieveReadArticles];
...
}
- (void)retrieveReadArticles {
UserHistory* userHistory = [UserHistory retrieveUserHistory]; //local variable
self.readArticles = userHistory.readArticles;
}
此范围变更破坏了功能,并导致读取的文章列表永不更新。
一位同事和我在猜测,ivar允许操作完全完成,而本地变量必须保持不正确,并且在返回更新之前超出范围。任何人都可以指引我解释这种意外行为的资源吗?