【发布时间】:2013-02-20 17:39:26
【问题描述】:
我有一个包含三个实体的核心数据模型:Notification、Group 和 Customer。这些是它们之间的关系:
- 一个客户属于多个组,一个组可以有多个客户。
- 一个通知被发送(属于)一个组,一个组可以接收(拥有)许多通知。
我想在按客户分组的UITableView 中显示所有通知。我创建了一个像这样的NSFetchedResultsController:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
fetchRequest.fetchBatchSize = 10;
fetchRequest.predicate = nil;
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Notification"
inManagedObjectContext:self.managedObjectContext];
fetchRequest.entity = entity;
// Default sort descriptors are built in a separate custom method
NSArray *sortDescriptors = [self getDefaultSortDescriptorsForEntity:entity];
fetchRequest.sortDescriptors = sortDescriptors;
return [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:self.managedObjectContext
sectionNameKeyPath:@"group.customers.firstName"
cacheName:nil];
假设这是检索按客户分组的所有通知的有效方法(我也不确定)iOS 抛出以下异常:
@"Failed to fetch all Notification objects"
@"Reason: Invalid to many relationship in setPropertiesToFetch: (group.customers.firstName) (NSInvalidArgumentException)"
我一次又一次地检查了这些关系,看看是否缺少某些东西,并且一切似乎都是正确的。我可以为所有实体创建和删除对象,它们之间的链接也是正确的。
我的问题是:是否可以遍历 sectionNameKeyPath 值中的多个关系?这种场景下应该如何处理多对多关系?
【问题讨论】:
-
一个“通知”可以属于多个“客户”。您想在它所属的每个“客户”部分中显示通知吗?
-
@MartinR 是的,在这个特定的应用程序中,可以在多个部分重复相同的通知。
-
我认为使用 fetched results controller 是不可能的,因为 FRC 无法返回包含重复元素的对象列表。
-
@MartinR 我曾想过另辟蹊径:获取所有客户并获取他们的通知。在那种情况下,我不知道如果通知被修改,
NSFetchedResultsControllerDelegate方法是否会被执行。 -
不,“客户”上的 FRC 不会收到相关“通知”对象更改的通知。
标签: ios core-data many-to-many nsfetchedresultscontroller