【发布时间】:2013-01-22 14:59:31
【问题描述】:
我正在使用MagicalRecord 为表格创建NSFetchedResultsController。
我有 NSManagedObjects 包含人群,这里有两个例子:
ContactGroup *everyoneContactGroup = [ContactGroup findFirstByAttribute:@"groupId" withValue:@"<GROUPID>"];
if (!everyoneContactGroup) {
everyoneContactGroup = [ContactGroup createEntity];
[everyoneContactGroup setGroupId:@"<GROUPID>"];
[everyoneContactGroup setGroupName:@"Everyone"];
[everyoneContactGroup setGroupSortOrder:@1]; // sort order within section
[everyoneContactGroup setGroupType:@1];
[everyoneContactGroup setGroupTypeName:@"Smart Groups"];
[everyoneContactGroup setGroupTypeSortOrder:@0]; // sort order for groups
}
ContactGroup *closeFriendsContactGroup = [ContactGroup findFirstByAttribute:@"groupId" withValue:@"<GROUPIDCLOSEFRIENDS>"];
if (!closeFriendsContactGroup) {
closeFriendsContactGroup = [ContactGroup createEntity];
[closeFriendsContactGroup setGroupId:@"<GROUPIDCLOSEFRIENDS>"];
[closeFriendsContactGroup setGroupName:@"Close Friends"];
[closeFriendsContactGroup setGroupSortOrder:@2];
[closeFriendsContactGroup setGroupType:@2];
[closeFriendsContactGroup setGroupTypeName:@"Custom Groups"];
[closeFriendsContactGroup setGroupTypeSortOrder:@10];
}
ContactGroup *familyContactGroup = [ContactGroup findFirstByAttribute:@"groupId" withValue:@"<GROUPIDFAMILY>"];
if (!familyContactGroup) {
familyContactGroup = [ContactGroup createEntity];
[familyContactGroup setGroupId:@"<GROUPIDFAMILY>"];
[familyContactGroup setGroupName:@"Family"];
[familyContactGroup setGroupSortOrder:@1];
[familyContactGroup setGroupType:@2];
[familyContactGroup setGroupTypeName:@"Custom Groups"];
[familyContactGroup setGroupTypeSortOrder:@10];
}
上面应该显示如下:
如您所见,联系人组“Everyone”应该被分组到它自己的一个部分中,并且应该按组的顺序显示为第一个组。
上面的第二个和第三个联系人组应该一起组成一个部分,这个部分应该出现在另一个部分的下方,其中有一个组。在此组(“自定义组”)内,每个联系人组都应按其groupSortOrder 排序。
这是我的 NSFetchedResultsController 代码:
- (NSFetchedResultsController *)fetchedResultsController {
if (!fetchedResultsController) {
fetchedResultsController = [ContactGroup fetchAllSortedBy:@"groupTypeSortOrder,groupSortOrder"
ascending:YES
withPredicate:nil
groupBy:@"groupTypeName"
delegate:self];
}
return fetchedResultsController;
}
我尝试了各种组合,但无法获得每个表格视图部分(联系人组组)和每个表格视图部分的排序顺序。我知道您可以添加逗号分隔的排序属性,但我就是无法正确组合。任何人都知道是否有可能使用 MagicalRecord 实现我想要的,或者我是否必须滚动一些非 MR 代码。
提前感谢您的任何意见和帮助!
更新:
这是由 Core Data 生成的 SQL:
CoreData: sql:
SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZGROUPID, t0.ZGROUPNAME, t0.ZGROUPSORTORDER,
t0.ZGROUPTYPE, t0.ZGROUPTYPENAME, t0.ZGROUPTYPESORTORDER
FROM ZTCONTACTGROUP t0
ORDER BY t0.ZGROUPTYPESORTORDER, t0.ZGROUPSORTORDER
更新:
所以我尝试了按groupTypeSortOrder 进行分组,现在它可以正常工作了。但是,不是我无法正确显示部分名称,因为它将显示为 groupTypeSortOrder 的数字。有什么想法吗?
- (NSFetchedResultsController *)fetchedResultsController {
if (!fetchedResultsController) {
fetchedResultsController = [ContactGroup fetchAllSortedBy:@"groupTypeSortOrder,groupSortOrder"
ascending:YES
withPredicate:nil
groupBy:@"groupTypeSortOrder"
delegate:self];
}
return fetchedResultsController;
}
【问题讨论】:
-
您有机会检查核心数据生成的 SQL 吗?
-
是啊,不能承认自己是超级精通SQL的人。但我会在上面添加。
-
@KyleLeNeau 已添加,见上文。
标签: ios core-data nsfetchedresultscontroller magicalrecord