ios - NSFetchedResultsController 的复杂获取请求

标签 ios cocoa-touch core-data nsfetchedresultscontroller

这是我的模型的简化外观:

  • 媒体具有属性“状态”,可以是“正在上传”或“已上传”。
  • 用户的属性“syncStatus”为“NotSynced”或“Synced”。
  • ObjectX 是用户和媒体之间的“链接”对象
  • 用户与 ObjectX 有一对多的关系
  • ObjectX 与 Media 具有一对一的关系

有没有什么方法可以使用 NSFetchedResultsController 来获取所有“已同步”且所有媒体都已“上传”的用户?当“媒体”状态更改时,它也必须更新其内容,以便获取新用户。我听说 NSFetchedResultsController 不能很好地处理如此复杂的获取请求。

Model Graph

最佳答案

我同意用户应该有另一个状态标志(或使用同步状态标志)。您可以通过覆盖媒体对象中的 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]

关于ios - NSFetchedResultsController 的复杂获取请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31124514/

相关文章:

ios - 如何在触摸 ImageView 数组时隐藏图像?

ios - NSData荒谬的长度错误

ios - 无法在 View Controller 中创建 socket /操作

ios - 更改 View 的边界不会更改它绘制的位置

ios - 从 CoreData 接收图像数组

ios - +[NSManagedObjectModel mergedModelFromBundles::forStoreMetadata:] 总是返回 nil

ios - 在 Swift 中使用 MagicalRecord 实例化的向下转换 CoreData 实体

ios - unwind segues 和 popping to view controllers 之间有什么区别?

ios - 尝试创建一个 Xcode Objective-C 函数来记录我的 UIView 内容的视频捕获并保存到手机

iphone - 如何以编程方式创建横向 UIView?