2017-02-15 5 views
0

У меня есть модель, для которой мне нужно создать составной ключ. Я хочу использовать KVO для обновления составного ключа при изменении одного из двух столбцов первичного ключа. Я не могу понять, какой метод init переопределить для регистрации для KVO. Я переопределилКак переопределить инициализатор в Realm Cocoa

- (id) init 
- (id) initWithValue:(id)value 
+ (instancetype) createOrUpdateInRealm:(RLMRealm *)realm withValue:(id)value 

и добавил записи журнала. Ни один из них не отображается в консоли. Я использую Realm + JSON для создания этих объектов.

ответ

0

Если вы запрашиваете уже сохраненный объект Realm, он использует частный метод инициализации, который не является общедоступным.

@interface RLMObject() 

// unmanaged initializer 
- (instancetype)initWithValue:(id)value schema:(RLMSchema *)schema NS_DESIGNATED_INITIALIZER; 

// live accessor initializer 
- (instancetype)initWithRealm:(__unsafe_unretained RLMRealm *const)realm 
         schema:(RLMObjectSchema *)schema NS_DESIGNATED_INITIALIZER; 

@end 

Вы можете попробовать переопределить эти методы и прикрепление к наблюдателю, но я бы рекомендовал пытаться избежать этого, если это возможно.

Обычно мы рекомендуем использовать отдельный пользовательский метод доступа, который обновляет свойства, которые вы в противном случае изменили бы, и затем реализовать логику реактивного изменения в этой логике.

Помимо этого, Realm также recently added the ability to add notification blocks to individual objects (в отличие от простых коллекций), поэтому я бы определенно рекомендовал использовать это над KVO, если вам это нужно.

+1

Мы все еще строим api, поэтому я закончил добавление поля «compositeKey» в DTO. На самом деле это не ответ на этот вопрос, так как я не делаю ничего в Realm, чтобы справиться с этим. Я оставлю вопрос, надеясь, что ваш ответ поможет кому-то. – smokingoyster

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