Realm - невозможно установить объект подкласса типа в свойство родительского класса типа

Всем привет,

Я столкнулся с небольшой проблемой с Realm, у меня есть класс «Контакт» и подкласс «Человек», определенный как:

Человек.ч

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

RLM_ARRAY_TYPE(Person)

@interface Person : Contact

@property NSString * nickName;

@end

У меня есть другой объект под названием «Адрес», который имеет свойство «Контакт» (адрес может быть связан только с одним контактом).

Адрес.ч

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

RLM_ARRAY_TYPE(Address)

@interface Address : RLMObject

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

@property RLMContact *contact;

@end

Проблема в том, что когда я пытаюсь установить объект «Человек» в свойство контакта «Адрес», я получаю эту ошибку:

[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'

Я даже пытался после определения класса Person в моем 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

У кого-нибудь есть идея?

Заранее спасибо, ребята.


person Randy    schedule 15.05.2015    source источник


Ответы (1)


В Realm, несмотря на то, что вы можете создавать подклассы для своих RLMObject сущностей, эти подклассы не являются полиморфными. То есть вы не можете заменить объект Person, когда говорите, что ссылаетесь на объект Contact, потому что Realm рассматривает их как совершенно отдельные сущности.

person segiddins    schedule 15.05.2015
comment
Сегиддины еще раз спасибо! - person Randy; 18.05.2015
comment
Я бы сказал, что это довольно большой недостаток, сидящий поверх объектно-ориентированного языка, особенно с более сложной базой данных. Можно ли это считать особенностью? - person Andrew; 22.06.2015
comment
В будущем мы намерены ввести своего рода полиморфизм, но для этого потребуются серьезные изменения в базовом механизме базы данных. Вы можете подписаться на github.com/realm/realm-cocoa/issues/1109. для обновлений по этому поводу. - person segiddins; 22.06.2015