领域 - 无法将子 class 类型的对象设置为父 class 类型的 属性

Realm - Can't set object of type subclass to property of type parent class

大家好,

我遇到了一个 Realm 的小问题,我有一个 class "Contact" 和一个 subclass "Person" 定义为:

Person.h

#import <Realm/Realm.h>
#import "Contact.h"

RLM_ARRAY_TYPE(Person)

@interface Person : Contact

@property NSString * nickName;

@end

我有另一个名为 "Address" 的实体,它有一个 "Contact" 属性(一个地址只能与一个联系人相关)。

Address.h

#import <Realm/Realm.h>
@class Contact;

RLM_ARRAY_TYPE(Address)

@interface Address : RLMObject

@property NSString * city;
@property NSString * country;

@property RLMContact *contact;

@end

问题是:当我尝试将 "Person" 对象设置为 "Address" 的联系人 属性 时,出现此错误:

[address setContact:person];
'Can't set object of type 'Person' to property of type 'Contact'

我试过了,但还是一样的问题:

[address setContact:(Contact *)person];
'Can't set object of type 'Person' to property of type 'Contact'

我什至在我的 Address.h 上定义了 Person class 之后尝试过,但仍然是同样的问题:

Address.h

#import <Realm/Realm.h>
@class Contact;
@class Person;

RLM_ARRAY_TYPE(Address)

@interface Address : RLMObject

@property NSString * city;
@property NSString * country;

@property RLMContact *contact;

@end

有人有想法吗?

在此先感谢大家。

在 Realm 中,虽然您可以对 RLMObject 实体进行子类化,但这些子类不是多态的。也就是说,当您说要链接到 Contact 对象时,您不能替换 Person 对象,因为 Realm 将它们视为完全独立的实体。