【问题标题】:How to sort RLMArray using property?如何使用属性对 RLMArray 进行排序?
【发布时间】:2016-12-28 16:21:25
【问题描述】:

我正在尝试使用其属性对 RLMArray 进行排序,但出现错误:

只能在从 RLMRealm`

 RLMResults *rlmResults  =  [myLog.myRLMArray sortedResultsUsingProperty:@"orderNum" ascending:YES];

这里的myLog.myRLMArray 是我从RLMRealm 获得的数据副本。

myLog 被声明为:

 RLM_ARRAY_TYPE(MyWidgetSet)
@interface MYLogObject : RLMObject
@property RLMArray< MyWidgetSet *>< MyWidgetSet > *myRLMArray;
@end

我的自定义类是

#import <Realm/Realm.h>

@interface MyWidgetSet : RLMObject
@property NSString *widgetName;
@property NSString *orderNum;
@end

我发现了一个类似的question,它是在 2 年前发布的。我希望有一个更新的解决方案来解决这个问题。我正在使用 Realm 2.1.2

【问题讨论】:

    标签: objective-c realm rlmarray


    【解决方案1】:

    如你在错误信息中所见,sortedResultsUsingProperty 方法只能用于查询获得的对象。您应该先将对象保存到 Realm。这是对RLMArray 进行排序的最佳方式。

    或者,如果您想对尚未保存到 Realm 的 RLMArray 进行排序,您可以使用 NSArray。所以你的做法是正确的。唯一的事情是将RLMArray 转换为NSArray 可以写得更简单。使用valueForKey:@"self"即可,不需要遍历所有元素。

    NSArray *tempLog = [myLog.myRLMArray valueForKey:@"self"];
    ...
    

    【讨论】:

    • 好提示:-valueForKey:@"self"
    【解决方案2】:

    现在我使用 NSArray 对数据进行排序。我希望有人会想出一个更好的方法来直接使用 RLMArray

    NSMutableArray *tempLog = [NSMutableArray array];
    for (MyWidgetSet *tempSet in myLog.myRLMArray){
        [tempLog addObject:tempSet];
    }
    

    并使用sortedArrayUsingComparator进行排序

     NSArray *tempWelLogCopy = [tempLog sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
    
            if ([[obj1 valueForKey:@"orderNum"] integerValue] > [[obj2 valueForKey:@"orderNum"] integerValue]) {
                return (NSComparisonResult)NSOrderedDescending;
            }
            if ([[obj1 valueForKey:@"orderNum"] integerValue] < [[obj2 valueForKey:@"orderNum"] integerValue]) {
                return (NSComparisonResult)NSOrderedAscending;
            }
            return (NSComparisonResult)NSOrderedSame;
        }];
    

    并将排序后的数据添加回 RLMArray

        [myLog.myRLMArray removeAllObjects];
        [myLog.myRLMArray addObjects:tempWelLogCopy];
    

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-14
      • 2020-10-01
      • 1970-01-01
      相关资源
      最近更新 更多