我正在使用核心数据NSFetchedResultController
。在这种情况下,我有n
个用户组,用户可以选择特定组或选择all group
。因此,我手动将All group
标题,static ID
和相关内容添加到数据库中。
NSFetchRequest <IRSUserAssetGroup *> *fetchRequest = [NSFetchRequest fetchRequestWithEntityName: [IRSUserAssetGroup entityName]];
NSSortDescriptor *nameSortDescriptor = [NSSortDescriptor sortDescriptorWithKey: NSStringFromSelector(@selector(assetGroupName))
ascending: YES
selector: @selector(localizedCaseInsensitiveCompare:)];
[fetchRequest setSortDescriptors: @[nameSortDescriptor]];
[fetchRequest setFetchBatchSize: 4];
NSManagedObjectContext *mainContext = [[IRSCoreDataManager sharedManager] managedObjectContext];
NSFetchedResultsController <IRSUserAssetGroup *> *fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest: fetchRequest
managedObjectContext: mainContext
sectionNameKeyPath: nil
cacheName: nil];
NSError *fetchError = nil;
if (![fetchedResultsController performFetch: &fetchError])
FCALog(@"fetch error: %@", fetchError);
[self setUserAssetGroupFetchedResultsController: fetchedResultsController];
这是我的FRC
代码。我正在使用按名称排序。某些组名称以数字开头。因为这个All group
不在第一位。
这可能All group
总是排在最前面吗?
额外:我正在使用带有搜索选项
的表格视图示例:@[@1, @5, @"text", @"aaaaaaa", @"All group"]
。此处All group
始终显示在列表顶部。我怎么能这样排序呢。
输出:@[@"All group", @1, @5, @"aaaaaaa", @"text"]
答案 0 :(得分:0)
你和我知道&#39;所有小组&#39;是特别的,因为我们阅读并理解了这个词,但是核心数据无法知道&#39; All group&#39;很特别;所有它都认为它以&#34; A&#34;开头。您可以向实体isAllGroup
添加另一个属性,然后按其排序,然后按assetGroupName
排序。
或者你可以拥有一个属性&#39; groupOrder&#39;对于&#34;所有组&#34;为0每个其他团体100个。这样您就可以有更多空间在不创建新属性的情况下进行其他特殊组排序。
更通用的方法是添加属性assetGroupNameForSort
并按其排序,而不是仅用于显示的assetGroupName
。对于大多数组,值是相同的,但对于&#34;所有组&#34;它是&#34; __ All Group&#34;或类似的东西。这也可以用于修复可能发生的问题,这些问题可能会出现在不同语言中的名称,这些名称会以您不希望的方式排序。
我会推荐第一种方法,只需添加&#39; isAllGroup&#39;属性。这是最简单的,数据很容易理解。
另外:次要问题 - fetchedResultsController不尊重FetchBatchSize,因此您可以删除它。