我通过列表属性“index”获取名为“DictObj”的Realm对象,如下所示:
NSArray *listIDs = @[@1000,@0,@100,@4];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"index IN %@",listIDs];
self.fetchedResults = [DictObj objectsInRealm:realm withPredicate:predicate];
我只是获取结果,但它按主键“index”自动排序,我希望按“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中的列表自定义排序结果顺序?
答案 0 :(得分:4)
-[RLMResults sortedResultsUsingDescriptors:]
需要NSArray<RLMSortDescriptor *>
。在您的代码中,您传递的是NSArray<NSSortDescriptor *>
。 RLMSortDescriptor
和NSSortDescriptor
是具有不同接口的不同类,因此您将看到异常。
目前RLMResults
只能按属性值直接排序。为了对计算出的排序进行排序,就像您需要使用NSArray
的内容填充RLMResults
之后,对其进行排序。在RLMResults
上添加对此的支持,正在Realm的GitHub存储库的issue #1265中进行跟踪。