Привязать NSTextField к методу экземпляра объекта? - PullRequest
0 голосов
/ 06 января 2012

У меня есть метод экземпляра для объекта, который выплевывает строку на основе некоторых других объектов. Могу ли я привязать этот метод экземпляра к полю?

Ответы [ 2 ]

0 голосов
/ 03 июня 2014

Вы можете привязать метод экземпляра получателя к значению поля, только если вы реализуете соответствующий метод установщика для привязки, чтобы попытаться записать изменения в значении .(Для некоторых других типов привязки установщик не требуется)

Допустимо, что установщик пуст.

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

- (NSNumber*) numberOfNewItems
{
    NSUInteger total = 0;

    for (childItem* ci in self.items)
        total += (ci.isNewValue) ? ci.items.count : 0;

    return @(total);
}

// Does nothing but allows binding to above to be recalculated
- (void) setNumberOfNewItems:(NSNumber*)number { }

Это делает двусторонние привязки счастливыми.Если у вас не было установщика, вы получите ошибки, связанные с тем, что ключевой путь не соответствует KVC.(Если вы не привязываетесь к чему-то одностороннему, например, к «заголовку» или «подсказке» - для них не нужны установщики. Но установщик пригодится для пересчета названий и подсказок через геттер)

Обратите внимание, что внутри childItems вы можете просто сделать это:

self.isNewValue = NO;
[self.parent setNumberOfNewItems:nil]; // Trigers KVO for binding (does nothing else)

... что намного проще, чем попытаться зарегистрировать родительский регистр в качестве наблюдателя KVO для всех детей.

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

+ (NSSet *)keyPathsForValuesAffectingNumberOfNewItems {
    return [NSSet setWithObjects:@"items", @"somethingElse", nil];
}
0 голосов
/ 06 января 2012

Создайте свойство NSString, откройте файл пера и свяжите текстовое поле value со свойством.Затем любые изменения, внесенные в свойство, будут отражены в текстовом поле.

...