MagicalRecord
テーブルのを作成するために使用しNSFetchedResultsController
ています。
私はNSManagedObjects
人々のグループを含んでいます、ここに2つの例があります:
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」は独自のセクションにグループ化され、グループの順序で最初のグループとして表示されます。
上記の2番目と3番目の連絡先グループは、一緒にセクションにグループ化する必要があります。このセクションは、1つのグループが含まれる他のセクションの下に表示されます。このグループ(「カスタムグループ」)内では、各連絡先グループを。で並べ替える必要がありますgroupSortOrder
。
これが私のNSFetchedResultsControllerコードです:
- (NSFetchedResultsController *)fetchedResultsController {
if (!fetchedResultsController) {
fetchedResultsController = [ContactGroup fetchAllSortedBy:@"groupTypeSortOrder,groupSortOrder"
ascending:YES
withPredicate:nil
groupBy:@"groupTypeName"
delegate:self];
}
return fetchedResultsController;
}
さまざまな組み合わせを試しましたが、各テーブルビューセクション(連絡先グループのグループ)と各テーブルビューセクション内の両方で並べ替え順序を取得できません。カンマ区切りの並べ替え属性を追加できることは知っていますが、組み合わせを正しく行うことができません。MagicalRecordで私が望むことを達成できるかどうか、またはMR以外のコードをロールする必要があるかどうかは誰でも知っています。
ご意見やご協力をよろしくお願いいたします。
アップデート:
CoreDataによって生成される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;
}