Как создать привязку для NSApp.dockTile's - PullRequest
2 голосов
/ 06 января 2009

В IB легко привязать метку или текстовое поле к keyPath некоторого контроллера.

NSDockTile (доступный через [[NSApp dockTile] setBadgeLabel: @ "123"]) не отображается в IB, и я не могу понять, как программно связать его свойство "badgeLabel", как вы можете связать метку / текстовое поле / столбец таблицы.

Есть идеи?

Ответы [ 3 ]

3 голосов
/ 07 января 2009

NSDockTile не имеет никаких привязок, поэтому вашему контроллеру придется обновлять плитку док-станции вручную. Вы можете сделать это, используя KVO, который будет иметь тот же эффект, что и его привязка.

Создать контекст как глобальный:


static void* MyContext=(void*)@"MyContext";

Затем, в вашем методе init:


[objectYouWantToWatch addObserver:self forKeyPath:@"dockTileNumber" options:0 context:MyContext];

Затем необходимо реализовать этот метод, чтобы получать уведомления об изменениях в пути к ключу:

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if (context == MyContext) {
        [[NSApp dockTile] setBadgeLabel:[object valueForKeyPath:keyPath]];
    }
    else {
        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
    }
}

Убедитесь, что вы удаляете наблюдателя, когда объект контроллера исчезает.

2 голосов
/ 06 января 2009

Если NSDockTile поддерживает привязки, вы можете использовать метод bind:toObject:withKeyPath:options: для установки привязок в свойстве badgeLabel. Проверьте документацию для деталей, какие аргументы использовать. Если это не работает, вы можете либо реализовать наблюдение значения ключа в своем классе контроллера и обновлять метку при каждом изменении значения, либо даже переопределить NSDockTile, чтобы создать подкласс, совместимый с привязками.

0 голосов
/ 06 января 2009

Я пробовал множество вариантов bind:toObject:withKeyPath:options: на NSDockTile, на контроллере, на источнике данных. Я не могу понять комбинацию, которая работает. Альтернативно, есть ли способ иметь объект BatchController, который может быть связан с источником данных, и он затем обновляет значок? Как мне взять объект NSO и сделать его привязываемым?

...