将一个 NSManagedObject 用于 UITableView 部分,它与另一个 NSManagedObject 的关系用于行?

Posted

技术标签:

【中文标题】将一个 NSManagedObject 用于 UITableView 部分,它与另一个 NSManagedObject 的关系用于行?【英文标题】:Use one NSManagedObject for UITableView sections and it's relationship to another NSManagedObject for rows? 【发布时间】:2013-01-28 03:14:20 【问题描述】:

是否可以设置UITableViewNSFetchedResultsController,因为它是dataSource,其中Contact Group 确定部分,Contact GroupPerson 的多对多关系确定每个部分的行?

所以我的数据模型看起来像这样。

Contact Group
 - Person
 - Person
 - Person
Contact Group
 - Person
 - Person
 - Person

Contact Group 是一个NSManagedObject,它与Person NSManagedObjects 具有一对多关系。基本上表格视图也应该如上所示。

我正在使用 MagicalRecord,如果这有所不同,这看起来对吗?

- (NSFetchedResultsController *)fetchedResultsController 
    if (!_fetchedResultsController) 
        _fetchedResultsController = [ContactGroup fetchAllSortedBy:@"displayOrder"
                                                           ascending:YES
                                                       withPredicate:nil
                                                             groupBy:@"SELF.contacts"
                                                            delegate:self];
    
    return _fetchedResultsController;

哦,我需要能够对每个部分中的联系人进行排序(并保留)。

感谢任何指导。如果我需要更好地澄清,请随时发表评论。

【问题讨论】:

【参考方案1】:

我没有使用 Magical Record 的经验,但由于您主要想要来自 Person 的记录,因此您必须在 Person 而不是 ContactGroup 上调用该方法:

- (NSFetchedResultsController *)fetchedResultsController 
    if (!_fetchedResultsController) 
        _fetchedResultsController = [Person fetchAllSortedBy:@"displayOrder"
                                                   ascending:YES
                                               withPredicate:nil
                                                     groupBy:@"contactGroup.groupName"
                                                    delegate:self];
    
    return _fetchedResultsController;

【讨论】:

但这会让他们被他们的“父”联系组分成几个部分吗? 是的,如果该关系的名称是“contactGroup”。如果是其他内容,请更改 sectionKeyPath 的名称。 我试过这个,但它说:*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ContactGroup groupLabel]: unrecognized selector sent to instance 0x8174c20' *** groupLabel 是组的名称。 哦,还有一件事,我试图从 Contact Groups 对象派生该部分的原因是,如果特定 Contact Group 不存在 Person 对象,则该部分不会出现,但我希望该部分始终基于Contact Group 对象的存在出现,然后基于Person 对象的行出现。 请将您问题中的代码编辑为您当前拥有的代码并包含错误消息,如果没有看到任何代码很难判断。但是,如果您这样做,则不会显示空白部分。我不确定 Magical Record 是否可以做到这一点。

以上是关于将一个 NSManagedObject 用于 UITableView 部分,它与另一个 NSManagedObject 的关系用于行?的主要内容,如果未能解决你的问题,请参考以下文章

NSManagedObject 的设置属性阻止了核心数据中的 iPad UI'

NSManagedObject 和 Codable 用于存储在服务器和本地存储中的类

可以将 NSmanagedObject 移动到另一个 NSManagedContext 吗?

核心数据 NSManagedObject 更改

iOS 14 Beta - Swift UI 中的核心数据错误:任何模型中都没有 NSEntityDescriptions 声明 NSManagedObject 子类

@StateObject 用于没有上下文的 NSManagedObject 不发布更改