这是我的模型的简化外观:
有没有办法使用NSFetchedResultsController来获取所有“同步”的用户?并且所有媒体都是“已经上载”#?当媒体'媒体'状态已更改,以便提取新用户。我听说NSFetchedResultsController不能很好地处理这些复杂的获取请求。
答案 0 :(得分:1)
我同意用户应该有另一个状态标志(或使用同步状态标志)。您可以通过覆盖媒体对象中的setter来在中心点更新它。
-(void)setStatus:(MediaStatus)value {
[self willChangeValueForKey:@"status"];
[self setPrimitiveStatus:value];
[self didChangeValueForKey:@"status"];
// get status of other media objects
NSSet *objects = self.objectx.user.objects;
NSSet *updatingObjects =
[objects filteredSetUsingPredicate:
[NSPredicate predicatesWithFormat:@"media.status = %@", kUpdatingStatus]];
self.objectx.user.updating =
updatingObjects.count ? kUpdatingStatus : kUpdatedStatus;
}
但是,适当的FRC谓词也应该有用。例如,仅显示更新的用户,类似于
[NSPredicate predicateWithFormat:@"any objectx.media.status = $@", kUpdatedStatus]
答案 1 :(得分:0)
通过对数据进行非规范化来建模获取更为实际。您可以向用户添加“状态”布尔值,指示是否已上传所有媒体。
这比必须聚合每个对象模型的状态要有效得多。