iOS – 如何刷新/更新核心数据瞬态属性?

我正在使用核心数据,NSFetchedResultsController UITableView,具有瞬态NSDate属性。 我有这个作为一个瞬态属性的主要原因是,我的UITableView条目被放入基于NSDate的部分,但可以在date更改时在部分之间移动。

到目前为止,它似乎工作很好,但它只更新/刷新(我真的是新的,所以我不知道我是否使用正确的术语,对不起!),当我要么closures应用程序,并杀死它从多任务处理,或通过Xcode重新运行。 如果我不这样做,项目不会改变,不会放在正确的部分。 有没有办法手动让它刷新,所以用户不需要这样做,让它运行正确?

谢谢!

当你发送一个refreshObject:mergeChanges:到你的对象时, 瞬态属性被刷新。

Mundi提供的应用关键值观测机制的解决scheme也可能起作用,如果这样做,肯定比明确刷新更方便。

首先 ,确保在创build抓取的结果控制器时,瞬态属性仅用于sectionNameKeyPath 。 最好命名为sectionIdentifier (正如苹果在其示例代码中所做的那样)。实际date应该是您的实体的单独属性。 (我会叫它dateAttribute

其次 ,确保您在Entity.m文件中指定关键path依赖项:

 + (NSSet *)keyPathsForValuesAffectingSectionIdentifier { // If the value of dateAttribute changes, the section identifier may change as well. return [NSSet setWithObject:@"dateAttribute"]; } 

第三 ,确保在你的控制器中,你对托pipe对象上下文的变化做出了适当的反应

 - (void)controllerDidChangeContent:(NSFetchedResultsController *)controller { if (!self.tableView.editing) [self.tableView reloadData]; // the quick and dirty method without animations; // see referenced code for a more pleasant approach } 

如果有什么不清楚的地方,请看一下Apple的例子DateSectionTitles 。