プリファレンス設定を変更した時に SimpleViewerの表示へ即時反映したい。
NSUserDefaultsに対してキー監視を登録してやれば良い。
[[NSUserDefaults standardUserDefaults]
addObserver:self
forKeyPath:@"ViewerOptions.ImageBounds"
options:NSKeyValueObservingOptionNew
context:nil];
とすると、NSUserDefaultsの ViewerOptions_ImageBounds 値が変更されると下記がコールバックされる。
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
だがアプリ起動時に下記エラーを出して強制終了してしまった。
[addObserver: forKeyPath:@"ViewerOptions.ImageBounds" options:0x1 context:0x0] was sent to an object that is not KVC-compliant for the "ViewerOptions" property.
原因は Keypath文字列に . (ドット)が含まれていたこと。ドットは Keypathの区切りとして使われる特別な文字な為、別の解釈をされてしまった。 . をやめれば問題ない。
[[NSUserDefaults standardUserDefaults]
addObserver:self
forKeyPath:@"ViewerOptions_ImageBounds" アンダースコア _ にしてみた。
options:NSKeyValueObservingOptionNew
context:nil];
- - - -
不注意にも NSUserDefaultsのキーのほとんどで . を使っていたので結局全部 _ に書き換えた。やれやれ。。