2015-09-02 2 views
0

Вот моя Realm модель:RLMObject с Запросы NSPredicate не возвращает результат

Pet.h

#import <Realm/Realm.h> 

@interface Pet : RLMObject 

@property NSString *species; 

@end 

Pet.m

#import "Pet.h" 

@implementation Pet 

+ (NSString *)primaryKey { 
    return @"species"; 
} 

@end 

Написать в Realm

- (void)writeCat { 
     RLMRealm *realm = [RLMRealm defaultRealm]; 
     [realm beginWriteTransaction]; 

     Pet *pet = [[Pet alloc] init]; 
     pet.species = @"cat";//as Primary Key 
     [Pet createOrUpdateInRealm:realm withValue:pet]; 

     [realm commitWriteTransaction]; 

     for (Pet *pet in [Pet allObjects]) { 

      NSLog(@"pet in realm: %@", pet); 
      //prints out: 
      //pet in realm: Pet {species = cat;} 
     } 
} 

запросов от Realm (после того, как данные получает письменное)

- (void)queryCat { 
    NSPredicate *predicate = [NSPredicate 
           predicateWithFormat: @"species == %@", @"cat"]; 
     RLMResults *cat = [Pet objectsWithPredicate:predicate]; 
     RLMResults *all = [Pet allObjects]; 

     NSLog(@"cat: %@ and all: %@", cat, all); 
     //prints out: 
     //cat: RLMResults <0x7fdeed8e8710> () 
     //and all: RLMResults <0x7ffa151c6630> () 
} 

EDIT

Как я назвал методы:

-(void)viewDidLoad{ 
    [self writeCat]; 
    [self queryCat]; 
} 

я пишу что-то в Realm но запрос nothi ng из него,

Что я сделал неправильно в вопросе?

+1

Кажется, что нет никаких проблем в коде. И я уверен, что ваш код успешно выполнен в моей среде. Не могли бы вы показать код, вызывающий методы 'writeCat' и' queryCat'? –

+0

@kishikawakatsumi Просто позвонил [self writeCat], а затем [self queryCat], ничего не делая. Странно, что '[Pet allObjects]' будет успешным сразу после '[realm commitWriteTransaction]', но сбой в любой другой момент. В то время как запрос кошки никогда не бывает успешным в любое время. – bluenowhere

+2

Код, который вы предоставили, также не воспроизводит проблему. Я поставил проект, который я тестировал, в Интернете по адресу https://github.com/bdash/realm-test-so-32345896, чтобы вы могли сравнить свой локальный код с тем, с чем я тестировал. Я подозреваю, что есть детали, которые вы опускаете, что имеет отношение к поведению, которое вы видите. – bdash

ответ

0

Попробуйте это,

RLMResults *allResults = [Pet allObjects]; //getting all objects 
allResults = [allResults objectsWhere:@"species contains 'cat'"]; // querying for cat 
0
RLMResults *results = [Pet objectsWhere:@"species = 'cat'"]; 
    if(results.count){ 
     Pet *foundedPet = results.firstObject; 
    } 
+0

http://i.imgur.com/VAETOGH.png, извините. – serdaryillar

Смежные вопросы