2016-11-11 35 views
3

我一直在測試用對象顛倒RLMArray順序的可能性。 我知道我可以添加對象到NSArray,然後添加一個reverseObjectEnumerator到該數組,但我想繼續使用RLMarray,因爲一些對象可能會失效。如果添加到NSArray中,它們將保持無效並拋出錯誤。RLMArray內部對象的顛倒順序

回答

3

就目前而言,RLMArray對象是直接映射到對象如何存儲在Realm中。如果你嘗試改變那裏的對象的順序,這就是它們將如何存儲在磁盤上。

雖然你確實正在嘗試繼續使用RLMArray。將對象從RLMArray複製到NSArray將在每個對象中打開頁面,這既是性能又是內存命中。

我可以推薦的最好的事情是繼續使用RLMArray,但是使用抽象和反轉對它的訪問的方法。

@interface MyObject: RLMObject 

@property RLMArray<ChildObject *><ChildObject> *children; 
- (RLMObject *)childAtInvertedIndex:(NSInteger)index; 

@end 

@implementation MyObject 

- (RLMObject *)childAtInvertedIndex:(NSInteger)index 
{ 
    NSInteger invertedIndex = (self.children.count - 1) - index; 
    return self.children[invertedIndex]; 
} 

@end 

這樣,你仍然得到來自RLMArray直接訪問對象的好處,但你能夠控制他們的訪問順序。 :)

+1

非常聰明。 Regards –

+0

非常感謝Amro! :) – TiM

+0

謝謝TiM它看起來像一個聰明的方式來扭轉,我會嘗試這種方法。 – EmilDo