使用一个 NSFetchedResultController 获取多个实体及其之间的关系
Fetch multiple entities with relation between them with one NSFetchedResultController
我有基础 class Worker
和子 classes Employee
、Bookkeeper
和 Director
以及它们的实体 xcdatamodeld
。
现在我想使用 NSFetchedResultController
将它们提取到 tableView
中,以便每个部分中的每个实体。
我不知道如何用单个 frc 做到这一点。
任何帮助。
一个NSFetchedResultsController
一次只能与一个实体一起工作。这对你来说没问题,因为你的 类 从工作实体继承,但你无法提供可以确定将用于这些部分的子类型的键路径。我建议的解决方案是向 Worker
实体添加一个类型属性,它可以像 Int
一样简单,然后在每个子类中将初始化期间的值设置为每个子类的不同值类型。例如。
directorInstance.type = 1
...
employeeInstatnce.type = 2
然后定义你的 NSFetchedResultsController:
var fetchRequest = NSFetchRequest(entityName: "Worker")
fetchRequest.predicate = NSPredicate(format: "lastName contains[cd] %@", nameSearchTerm)
var frc = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: moc, sectionNameKeyPath: "type", cacheName: nil)
我有基础 class Worker
和子 classes Employee
、Bookkeeper
和 Director
以及它们的实体 xcdatamodeld
。
现在我想使用 NSFetchedResultController
将它们提取到 tableView
中,以便每个部分中的每个实体。
我不知道如何用单个 frc 做到这一点。
任何帮助。
一个NSFetchedResultsController
一次只能与一个实体一起工作。这对你来说没问题,因为你的 类 从工作实体继承,但你无法提供可以确定将用于这些部分的子类型的键路径。我建议的解决方案是向 Worker
实体添加一个类型属性,它可以像 Int
一样简单,然后在每个子类中将初始化期间的值设置为每个子类的不同值类型。例如。
directorInstance.type = 1
...
employeeInstatnce.type = 2
然后定义你的 NSFetchedResultsController:
var fetchRequest = NSFetchRequest(entityName: "Worker")
fetchRequest.predicate = NSPredicate(format: "lastName contains[cd] %@", nameSearchTerm)
var frc = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: moc, sectionNameKeyPath: "type", cacheName: nil)