Вот настройка: У меня есть подкласс IKImageBrowserView, у которого zoomValue
свойство привязано к ключу VFBrowserZoomValue
в общем NSUserDefaultsController
. У меня есть NSSlider
, чья привязка value
привязана к одному и тому же ключу.Наблюдение NSUserDefaultsController не работает, когда установлены связанные свойства
Это прекрасно работает, чтобы изменить zoomValue
браузера с ползунка.
Я пытаюсь реализовать -magnifyWithEvent:
в моем подклассе IKImageBrowserView
, чтобы можно было масштабировать браузер с помощью жестящего пальца на трекпадах.
Вот моя реализация:
-(void)magnifyWithEvent:(NSEvent *)event
{
if ([event magnification] > 0) {
if ([self zoomValue] < 1) {
[self setZoomValue: [self zoomValue] + [event magnification]];
}
}
else if ([event magnification] < 0) {
if ([self zoomValue] + [event magnification] > 0.1) {
[self setZoomValue: [self zoomValue] + [event magnification]];
}
else {
[self setZoomValue: 0.1];
}
}
}
Это изменяет браузера zoomValue
правильно. Проблема в том, что NSUserDefaults
не обновляется с новым значением.
В другом месте приложения у меня есть реализация -observeValueForKeyPath:ofObject:change:context:
, которая наблюдает за браузера. Если я регистрирую значения масштабирования браузера, значения ползунка и ключа по умолчанию в этом методе, я вижу, что значение масштабирования браузера не было перенесено в NSUserDefaults, и ползунок не обновился.
Я пробовал окружить метод -magnifyWithEvent:
с вызовами -{will,did}ChangeValueForKey
.
Если вы создаете наблюдателя в zoomValue браузера с NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld как параметры, передается ли словарь изменений для наблюденияValueForKeyPath: ofObject: change: context: содержать правильный NSKeyValueChangeNewKey и NSKeyValueChangeOldKey? – hatfinch