2014-11-25 93 views
12

我查询过与objectsWhere一个RLMArray,我也得到一个RLMResults,但我需要一个RLMArray的结果在我的代码这一点。转换RLMResults到RLMArray

private var data: RLMArray? 

self.data = self.currentSubcategory!.datasheets // is a RLMArray 
self.data = self.data!.objectsWhere("is_favourite = 1") 

回答

11

RLMArray已经被分成两类:RLMArrayRLMResultsRLMArray现在只用于在 RLMObject类一对多的特性,而RLMResults用于所有 查询和排序方法。这样做是为了反映两个 实际上具有相当不同的API(例如,RLMResults不 具有addObject:),并且当我们为查询添加 更改通知时,它们预计会进一步发散。

这个迁移应该是在所有的编译器抱怨 有关地方与RLMResults更换RLMArray 一样简单。

为了配合这一点,arraySortedByProperty:ascending:已更名 到sortedResultsUsingProperty:ascending:,并且addObjectsFromArray: 已更名为addObjects:反映的事实,你可以 传递任何枚举对象给它(如NSArrayRLMArray,或 RLMResults) 。

来源:http://realm.io/news/realm-cocoa-0.87.0/#rlmresults

希望这足够

+3

对于未来的境界新手像我这样的,请更新这个博客帖子这些变化。 https://realm.io/news/tutorial-building-a-todo-app-with-realm/伟大的框架,但文档目前有点分散。 – 2015-05-02 18:17:03

4
let datasheets = self.currentSubcategory!.datasheets!.objectsWhere("is_favourite = 1") 
let objects = Array(datasheets.generate()) 

self.data!.removeAllObjects() 
self.data!.addObjects(objects) 

创建结果的阵列是必需的,因为self.data!.removeAllObjects()线也将明确datasheets,因为RLMResults是活的,更新您作出更改来源。

6

你需要从RLMResult对象添加到RLMArray ...

@implementation RLMResults (RLMArrayConversion) 

- (RLMArray *)toArray { 
    RLMArray * array = [[RLMArray alloc] initWithObjectClassName:self.objectClassName]; 
    [array addObjects:self]; 
    return array; 
} 

@end