2010-06-15 1 views
0

У меня есть NSImageView, который настроен на редактирование. Я хотел бы иметь возможность вернуться к изображению по умолчанию, когда пользователь удалит изображение. Я попытался изменить значение, которое NSImageView привязано к настройщику, но потом он не вызывается, поэтому NSImageView пуст, несмотря на то, что связанное значение установлено на другое изображение. Вот код настройки:Изменение значения NSImageView при его редактировании с помощью элемента управления

-(void)setCurrentDeviceIcon:(NSImage *)newIcon { 
    [self willChangeValueForKey:@"currentDeviceIcon"]; 
    if(newIcon == nil) 
     newIcon = [currentDevice defaultHeadsetIcon]; 
    currentDeviceIcon = newIcon; 
    [self setDeviceChangesMade:YES]; 
    [self didChangeValueForKey:@"currentDeviceIcon"]; 
} 

Как мне сделать обновление NSImageView его значением?

Edit (Bindings Image):

http://img529.imageshack.us/img529/6800/picture5bs.png

ответ

0

Вам не нужно отправить себе willChangeValueForKey: и didChangeValueForKey: сообщения внутри метода сеттер. Когда что-то начинает наблюдать за вашим свойством currentDeviceIcon, KVO обертывает ваш метод setter, чтобы публиковать эти уведомления автоматически, когда что-то отправляет ваш объект сообщение setCurrentDeviceIcon:.

Таким образом, метод должен выглядеть следующим образом:

-(void)setCurrentDeviceIcon:(NSImage *)newIcon { 
    if(newIcon == nil) 
     newIcon = [currentDevice defaultHeadsetIcon]; 
    currentDeviceIcon = newIcon; 
    [self setDeviceChangesMade:YES]; 
} 

И тогда вам нужно отправить этот объект setCurrentDeviceIcon: сообщения, чтобы изменить значение свойства. Не назначайте непосредственно переменной экземпляра currentDeviceIcon, за исключением этого метода, и в init или dealloc (во втором случае вы обычно не отправляете себе никаких других сообщений).

Если это не работает для вас, ваше изображение не связано или связано с неправильным объектом. Как вы связываете это? Можете ли вы опубликовать код/​​скриншот инспектора Bindings?

+0

Право, что все еще не работает. Я уверен, что привязки в порядке (SS на оригинальной записи на всякий случай). Я думаю, что, возможно, я немного неясен. Управление отлично работает при изменении изображения с помощью контроллера, так как nsimageview позволяет пользователю нажимать клавишу удаления, когда фокусируется на нем, и изображение будет установлено на нуль. После этого программа вызывает setter, но не getter. – Septih

+0

О, я вижу. Сожалею; мое недоразумение. –

0

почему вы можете использовать селектор NSImageview например

-(IBAction)setImage:(id)sender 
{ 
    NSString *icon_path = [NSString stringWithFormat:@"%@/%@",[[NSBundle mainBundle]resourcePath],@"default_icon.png"]; 
    NSData *imgdata = [NSData dataWithContentsOfFile:icon_path]; 
    [[[self NSArrayController] selection] setValue:imgdata forKeyPath:@"currentDeviceIcon"]; 
} 

Здесь NSArrayController это ваше имя контроллера массива.