gpt4 book ai didi

ios - 如何按列表对 Realm 结果顺序进行排序?

转载 作者:可可西里 更新时间:2023-11-01 05:40:29 25 4
gpt4 key购买 nike

我通过属性“index”列表获取名为“DictObj”的 Realm 对象,如下所示:

NSArray *listIDs = @[@1000,@0,@100,@4];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"index IN %@",listIDs];
self.fetchedResults = [DictObj objectsInRealm:realm withPredicate:predicate];

我只是获取结果,但它会按主键“索引”自动排序,我想按“listIDs”保持排序。因此,我创建了 sortDescriptor 并尝试对其进行自定义排序,如下所示,但它因错误而崩溃:“由于未捕获的异常‘NSInvalidArgumentException’而终止应用程序,原因:‘-[NSSortDescriptor 属性]:无法识别的选择器发送到实例 0x”

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"index" ascending:NO comparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
NSNumber *num1 = [NSNumber numberWithInteger:(NSInteger)obj1];
NSNumber *num2 = [NSNumber numberWithInteger:(NSInteger)obj2];
NSInteger listIndex1 = [listIDs indexOfObject:num1];
NSInteger listIndex2 = [listIDs indexOfObject:num2];

return listIndex1 < listIndex2;
}];
self.fetchedResults = [[DictObj objectsInRealm:realm withPredicate:predicate] sortedResultsUsingDescriptors:@[sortDescriptor]];

//Model
@interface DictObj : RLMObject
@property NSInteger index;
@property NSString *name;
@end

如何在Realm中自定义按列表排序结果顺序?

最佳答案

-[RLMResults sortedResultsUsingDescriptors:]需要 NSArray<RLMSortDescriptor *> .在您的代码中,您传递了一个 NSArray<NSSortDescriptor *> . RLMSortDescriptorNSSortDescriptor是具有不同接口(interface)的不同类,因此您会看到异常。

目前RLMResults只能直接按属性值排序。为了像您一样对计算后的顺序进行排序,您需要填充 NSArrayRLMResults 的内容,然后对其进行排序。在 RLMResults 上添加对此的支持正在跟踪 issue #1265在 Realm 的 GitHub 存储库上。

关于ios - 如何按列表对 Realm 结果顺序进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34411212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com