2015-12-22 193 views
4

我取名叫「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中的列表排序結果順序?

回答

4

-[RLMResults sortedResultsUsingDescriptors:]需要NSArray<RLMSortDescriptor *>。在你的代碼中,你傳遞了一個NSArray<NSSortDescriptor *>RLMSortDescriptorNSSortDescriptor是具有不同接口的不同類,因此您看到的例外。

目前RLMResults只能通過屬性值直接排序。爲了對計算順序進行排序,就像您需要填寫NSArrayRLMResults的內容一樣,然後對其進行排序。在Realm的GitHub存儲庫上的issue #1265中追蹤RLMResults上的支持。

+1

謝謝!當它僅支持按屬性排序時非常難過。我希望它會很快更新,至少在「IN列表」的情況下保持秩序。 –

相關問題