2016-11-11 94 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