6

次のようなレルムオブジェクトがあるDogとしましょうPerson

@interface Dog : RLMObject

@property NSString *name;
@property NSInteger age;

@property RLMArray<Person> *owners;

@end

@implementation Dog

@end

RLM_ARRAY_TYPE(Dog)

@interface Person : RLMObject

@property NSString *name;
@property RLMArray<Dog> *dogs;

@end

@implementation Person

@end

RLM_ARRAY_TYPE(Person)

これは Realm のサンプル プロジェクトのサンプル コードです。唯一の違いは、エンティティがとしてオブジェクトDogの配列を持っていることです。つまり、 とは逆の関係です。PersonownersPersondogs

ここで達成したいことは、 の 1 つとしてDogを持つオブジェクトをクエリすることです。Personowners

どうやってやるの?

4

1 に答える 1

11

あなたがしなければならない[Dog objectsWhere:@"ANY owners = %@", person]のは、personあなたが照会したい所有者です。

完全な例:

@protocol Person;

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

@property RLMArray<Person> *owners;
@end

@implementation Dog
@end

RLM_ARRAY_TYPE(Dog)

@interface Person : RLMObject
@property NSString *name;
@property RLMArray<Dog> *dogs;
@end

@implementation Person
@end

RLM_ARRAY_TYPE(Person)

void test() {
    RLMRealm *realm = RLMRealm.defaultRealm;

    [realm beginWriteTransaction];
    Person *person = [Person createInRealm:realm withObject:@{@"name": @"Tim"}];

    Dog *dog = [Dog createInRealm:realm withObject:@{@"name": @"Rover", @"age": @5, @"owners": @[person]}];
    [Dog createInRealm:realm withObject:@{@"name": @"Rex", @"age": @10, @"owners": @[]}];
    [realm commitWriteTransaction];

    RLMArray *dogs = [Dog objectsWhere:@"ANY owners = %@", person];
    assert(dogs.count == 1);
    assert([dog isEqual:dogs[0]]);
}
于 2014-08-11T21:49:44.823 に答える