存储RLMResults而不是重新获取

时间:2016-07-20 14:39:15

标签: ios objective-c multithreading concurrency realm

我刚刚开始使用Realm for Objective-C,之前我使用过Realm for Swift,我记不起它有任何问题。

我想存储获取的对象并将它们转换为RLMObjects / NSMutableArrays并将它们作为ViewController的属性,因此我不必使用谓词和描述符再次获取它们并让它们通过循环来区分它们,因为那里要获取大量数据。

RLMResults *results = [Sales allObjects];
NSMutableArray<NSString *> resultsIDs* = [[NSMutableArray alloc] init];
NSMutableArray<Sales *> *uniqueSales = [[NSMutableArray alloc] init];
for (Sales *sale in results) {
    NSString *id = sale.id;
    if (![resultsIDs id]) {
        [resultsIDs id];
        [uniqueSales addObject:sale];
    }
}

self.distinctProducts = uniqueSales;

我知道RLMObjects不是线程安全的,但由于我同时向不同的对象模型添加不同的数据(并且在应用程序启动时只有一次),保持对线程的引用对我来说似乎不是一个好主意。 / p>

1 个答案:

答案 0 :(得分:0)

为了澄清,RLMResults对象是实时的,这意味着如果它们的基础数据发生了变化,它们会自动更新。因此,从来没有真正需要重新查询或刷新相同的结果对象。

如果您仍想存储自定义排序的RLMObject实例列表,最有效的方法是创建一个具有RLMArray属性的单独Realm模型类,然后您可以在其中保存你的所有物品。

例如,可能将其称为SalesList对象:

RLM_ARRAY_TYPE(Sales)

@interface SalesList : RLMObject
@property RLMArray<Sales *><Sales> *sortedSales;
@end

然后,只需保留一个SalesList对象,并将您排序的所有Sales个对象添加到sortedSales数组中。