我如何在Realm Cocoa中覆盖初始化器



我有一个我需要为复合密钥创建一个模型。当更改两个主密钥列之一时,我想使用KVO更新复合密钥。我似乎无法弄清楚要覆盖哪种初始方法来注册KVO。我已经覆盖

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

并添加了日志语句。他们都没有出现在控制台中。我正在使用Realm JSON创建这些对象。

如果您要查询已经持久的领域对象,它使用了不公开可用的私有初始化方法。

@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

您可以尝试覆盖这些方法并将观察者附加在此处,但是我建议尽可能避免这种方法。

我们通常建议的一件事是您实现一个单独的自定义访问方法,该方法更新您本来会更改的属性,然后在该逻辑中实现反应性更改逻辑。

除此之外,领域最近还添加了将通知块添加到单个对象(而不是仅收集)的功能,因此,如果您还需要,我绝对建议您在KVO上使用它。

最新更新