ios MagicalRecord 排序。需要部分标题列表

Posted

技术标签:

【中文标题】ios MagicalRecord 排序。需要部分标题列表【英文标题】:ios MagicalRecord sorting. Need a list of section headers 【发布时间】:2014-02-20 06:56:19 【问题描述】:

我有一个使用 MagicalRecord 访问的核心数据模型。我使用此代码来获取按类别排序和分组的表格视图:

frc = [ListActivity MR_fetchAllSortedBy:@"activityCategory,activityName"
                                  ascending:YES withPredicate:nil
                                    groupBy:@"activityCategory"
                                   delegate:nil];

生成的表格视图如下所示:

在另一个视图中,我使用相同的数据,但这次只需要一个节标题列表,由属性“activityCategory”表示。我以为这是一件简单的事情,但事实并非如此。这段代码,例如:

frc = [ListActivity MR_fetchAllSortedBy:@"activityCategory"
                              ascending:YES withPredicate:nil
                                groupBy:nil
                               delegate:nil];

产生这个:

相反,我想要的只是类别列表(单数),即在第一个示例中提供节标题的属性。我尝试了其他几种配置,但意识到我只是把东西扔到墙上看它是否会粘住。与框架一样出色的 MagicalRecord 的文档很少。

有人可以指点我的解决方案吗?

谢谢!

【问题讨论】:

【参考方案1】:

我最好的猜测是,在触发 fetched results 控制器之前,您需要对 fetch 请求进行更多配置。 MagicalRecord 使用命名约定,如果您将 find 更改为 request,它将改为返回 NSFetchRequest 对象。因此,对于您的情况,您需要类似

NSFetchRequest *request = [ListActivity MR_requestAllSortedBy:@"activityCategory" ascending:YES inContext:context];
[request setResultType:NSDictionaryResultType];
[request setReturnsDistinctResults:YES];
frc = [[NSFetchedResultsController alloc] initWithFetchRequest:request
                                          managedObjectContext:context
                                            sectionNameKeyPath:nil
                                                     cacheName:nil];
[frc MR_performFetch];

【讨论】:

感谢您的回复!我尝试了您的代码,添加了一个上下文,但得到了这个错误:“'NSFetchedResultsController' 没有可见的@interface 声明选择器'MR_performFetch'”我也找不到该选择器的任何快速帮助。我是否丢失了 MagicalRecord 的链接? 可能该方法不是公开的,我引用的是最新的代码,但我知道该方法在那里;破解源码看看。 该方法确实存在,但由于某种原因链接器没有找到它。或者也许还有另一个问题。我已经尝试清理它,检查构建阶段中列出的相关文件(NSManagedObject+MagicalRecord.m),确保在“-Prefix.pch”文件中导入“CoreData+MagicalRecord.h”并重新启动 Xcode。仍然得到错误。【参考方案2】:

您可能需要考虑拥有一个ListActivityCategory 实体以及将类别存储为ListActivity 上的字符串

这样你就可以在所有返回的 ListActivity 对象中获取那些而不是避风港来“唯一”

【讨论】:

我是 Core Data 和 MagicalRecord 的新手。您是否建议数据模型中的实体之间存在关系?如果是这样,听起来可行,但我从未这样做过。你能提供一个sn-p吗? 如果你用谷歌搜索,我相信那里有很多很好的教程。 我知道,Mike,我一直在 Lynda.com 上观看 Simon Allardice 的课程。目前,我正在尝试决定走哪条路——用 casademora 建议的方法纠正错误或创建一个新实体,这听起来也很有希望。当我清理它时,我会发布解决方案。谢谢!

以上是关于ios MagicalRecord 排序。需要部分标题列表的主要内容,如果未能解决你的问题,请参考以下文章

MagicalRecord NSFetchesResultsController 部分分组和排序 + 部分内也是如此

iOS MagicalRecord 对 tableview 的分组和排序。它们究竟是如何工作的?

具有 MagicalRecord 的多个数据库或仅将部分数据库同步到 iCloud

等效查询 MagicalRecord -> Realm.io

KVC使用MagicalRecord排序

自定义 NSFetchreqeust - 按子 NSSet 属性排序父实体 [MagicalRecord+Coredata]