iOS - 如何刷新/更新Core Data瞬态属性?

mhb*_*bdr 5 refresh core-data objective-c transient ios

我正在使用具有瞬态NSDate属性的核心数据NSFetchedResultsController UITableView.我将其作为瞬态属性的主要原因是我的UITableView条目基于NSDate放入部分,但是当日期更改时可以在各部分之间移动.

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

谢谢!

Mun*_*ndi 7

首先,确保您的transient属性仅用于sectionNameKeyPath创建获取结果控制器时.最佳名称sectionIdentifier(如Apple在其示例代码中所做的那样.)实际日期应该是您实体的单独属性.(我会称之为dateAttribute.

其次,请确保在Entity.m文件中指定密钥路径依赖项:

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

第三,确保在您的控制器中,您对托管对象上下文中的更改做出适当的反应

- (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
}
Run Code Online (Sandbox Code Playgroud)

如果有任何不清楚的地方,请查看Apple示例DateSectionTitles.


sve*_*ena 3

refreshObject:mergeChanges:当您向对象发送 a 时,瞬态属性将被刷新。

Mundi 提供的应用键值观察机制的解决方案可能也有效,如果有效的话,它肯定比显式刷新方便得多。