2016-12-28 26 views
0

私はそのプロパティを使用してRLMArrayをソートするためにしようとしているが、私はエラーを取得しています:プロパティを使用してRLMArrayをソートする方法は?

This method may only be called on RLMArray instances retrieved from an 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 

である私は2年前に投稿された同様のquestionを見つけました。私はこの問題の最新の解決策を望んでいます。私はレルム2.1.2を使用しています

答えて

2

ように戻ってソートされたデータを追加します願っていますあなたがエラーメッセージで確認することができますsortedResultsUsingPropertyメソッドは、クエリによって取得されたオブジェクトのためにのみ使用することができます。最初にレルムにオブジェクトを保存する必要があります。パフォーマンスのためにRLMArrayをソートするのが最善の方法です。

また、RLMArrayをRealmに保存していない場合は、NSArrayを使用できます。あなたがしていることは正しいです。唯一のことはRLMArrayからNSArrayに変換する方が簡単です。 valueForKey:@"self"を使用するだけで、すべての要素を繰り返し処理する必要はありません。

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

ヒント:-valueForKey:@ "self" –

1

今のところ私はNSArrayを使ってデータをソートしています。私は誰かがソート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; 
    }]; 

を使用して直接

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

とをRLMArray

を使用してそれを行うためのより良い方法を考え出すとRLMArray

[myLog.myRLMArray removeAllObjects]; 
    [myLog.myRLMArray addObjects:tempWelLogCopy]; 
関連する問題