Изменение значения NSImageView при редактировании через элемент управления - PullRequest
0 голосов
/ 15 июня 2010

У меня есть 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, его значение?

Редактировать (изображение привязки):

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

Ответы [ 2 ]

0 голосов
/ 03 декабря 2012

почему вы можете использовать селектор для 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 - имя вашего контроллера массива.

0 голосов
/ 15 июня 2010

Вам не нужно отправлять себе 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 (в последних двух, как правило, вы не должны отправлять себе другие сообщения).

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

...