2016-07-27 60 views
0

如何从RLMResults得到最后/前n个结果?领域得到最后n个结果

我认为你可以转换成NSArray,而不是- (NSArray *)subarrayWithRange:(NSRange)range;,但如果RLMResults非常重要,这种方法很糟糕。你

也可以这样做:

self.arrayOfSubscriptedResults = [NSMutableArray new]; 
RLMResults *results = [[ModelRO objectsWhere:@"smth == 21"] sortedResultsUsingProperty:@"property" ascending:NO]; 
[self.arrayOfSubscriptedResults addObject: [results lastObject]]; 
[self.arrayOfSubscriptedResults addObject: [results objectAtIndex:(results.count - 1)]]; 
[self.arrayOfSubscriptedResults addObject: [results objectAtIndex:(results.count - 2)]]; 

但是这就像一个拐杖。

也许有了谓语,但是弄不清楚怎么样?

编辑:

最终的解决方案:

RLMResults *results = getRealmResultsHere; 

int count = results.count; 
int numberOfFirstObjects = 3; 

if (count > 0) 
{ 
    self.mutableArray = [NSMutableArray arrayWithCapacity: numberOfFirstObjects]; 

    for (NSUInteger index = 0; (self.mutableArray.count < numberOfFirstObjects) && (count > index); index++) 
    { 
     [self.mutableArray addObject:results[index]]; 
    } 
} 

回答

0

为什么不环比RLMResults

用下面的领域模型

@interface Dog : RLMObject 
@property NSString *name; 
@property NSInteger age; 
@end 
@implementation Dog 
@end 

和验证码:

RLMRealm *realm = [RLMRealm defaultRealm]; 
[realm transactionWithBlock:^{ 
    [Dog createInRealm:realm withValue:@[@"Rex", @1]]; 
    [Dog createInRealm:realm withValue:@[@"Fido", @2]]; 
    [Dog createInRealm:realm withValue:@[@"Einstein", @3]]; 
    [Dog createInRealm:realm withValue:@[@"Ruffles", @4]]; 
}]; 

RLMResults *allDogs = [Dog allObjects]; 
NSUInteger numberOfDogs = 3; 
NSMutableArray *last3Dogs = [NSMutableArray arrayWithCapacity:numberOfDogs]; 
for (NSUInteger index = allDogs.count - numberOfDogs; last3Dogs.count < numberOfDogs; index++) { 
    [last3Dogs addObject:allDogs[index]]; 
} 
NSLog(@"last 3 dogs: %@", last3Dogs); 

这将记录以下:

last 3 dogs: (
    "Dog {\n\tname = Fido;\n\tage = 2;\n}", 
    "Dog {\n\tname = Einstein;\n\tage = 3;\n}", 
    "Dog {\n\tname = Ruffles;\n\tage = 4;\n}" 
) 
+0

我没有这样的,差不多。但在你的例子中 - 如果RLMResults * allDogs'内部少于3个对象呢? –

+0

这取决于你的情况。你想断言吗?或者“最多”提供请求项目的数量。完全取决于你 – jpsim

相关问题