2016-08-11 89 views
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允许操作完全完成,而本地变量必须保持不正确,并且在返回更新之前超出范围。任何人都可以指引我解释这种意外行为的资源吗?

回答

0

看起来标记代码毕竟可能是问题。我们正在检索现有阅读文章的词典,添加其他条目,并再次保存UserHistory对象。用现有的阅读文章更改该代码以创建一个全新的词典似乎可以解决问题,而无需使用伊娃范围。