2016-12-28 5 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을 정렬하려면 NSArray을 사용할 수 있습니다. 그래서 당신이하고있는 일이 정확합니다. 유일한 것은 RLMArrayNSArray으로 변환하는 것이 더 간단하게 작성할 수 있습니다. 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];