2016-07-27 7 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)]]; 

が、この:

また、あなたのような何かを行うことができます。

おそらく述語を持つことができますか?

EDIT:

最終的な解決策:

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

関連する問題