我使用NSFetchedResultsController
来获取UITableView
中显示的对象列表。如果我更改对象中的值,则整个事件会触发并自动重新加载已更改的行。但其中一个显示值来自相关对象(一对多关系)。这些对象具有瞬态标题(因此它的值再次来自另一个对象)。当此标题更改时,不会重新加载行。
问题:有人可以建议一个干净的解决方案吗?
可能的脏解决方案:我可以在类中创建一个瞬态属性,该属性将使用“假”setter方法获取,因此NSFetchedResultsController
将看到更改并触发重新加载。但是在我看来这很脏。
提前致谢!
答案 0 :(得分:3)
FRC
跟踪一个特定实体的对象属性的变化。因此不跟踪相关实体的对象的变化。但是你可以使用KVO来触发FRC
反应。
[Department].employees <->> [Employee].department
在Employee.m
:
- (void)setTitle:(NSString *)title
{
[self willChangeValueForKey:@"title"];
[self setPrimitiveValue:title forKey:@"title"];
[self didChangeValueForKey:@"title"];
[self.department willChangeValueForKey:@"employees"];
[self.department didChangeValueForKey:@"employees"];
}
或类似的东西(尽管我自己没有测试过):
- (void)didChangeValueForKey:(NSString *)key
{
[super didChangeValueForKey:key];
if (self.department && [key isEqualToString:@"title"]) {
[self.department willChangeValueForKey:@"employees"];
[self.department didChangeValueForKey:@"employees"];
}
}