2017-02-15 56 views
0

我有一个模型,我需要为其创建一个组合键。当两个主键列中的一个更改时,我想使用KVO更新组合键。我似乎无法弄清楚要重写哪个init方法来注册KVO。我已重写如何覆盖领域初始化可可

- (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,所以我最终为DTO添加了一个“compositeKey”字段。这不是真正的答案,因为我没有在Realm中做任何事情来处理这个问题。我会离开这个问题,希望你的回答有助于某人。 – smokingoyster