Идентификатор на колона NSTableview

Имам NSTableview, в този табличен изглед попълвам колони с objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row.

Бих искал колона, която не е попълнена. Ако поставя колона без идентификатор или идентификатор, който не съответства на ключ, получавам грешка, че кодирането на ключ не е съвместимо.

Сега това, което направих, за да заобиколя това, е да добавя колона с идентификатор, наречен "skip", проверявам за това условие в моя код с това...

-(id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{
    Pizza* pizza  = [pizza objectAtIndex:row];


    NSString* identifier = [tableColumn identifier];

    if ([identifier isEqualToString:@"skip"]) {
        return nil;
    }

    return [pizza valueForKey:identifier];
}

Трябва да отвърна и на това в setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row.

Изглежда, че работи добре, но изглежда като малко хак.

Има ли по-добър начин да направите това?

Освен това причината, поради която искам празни колони, е, че искам да поставя обекти като бутони, които не принадлежат към масива, към който препраща табличният изглед.

Благодаря за приноса!


person M Jesse    schedule 17.05.2014    source източник
comment
Не е хак. Така се прави. Трябва да проверите идентификатора на колоната, за да разберете каква стойност на обекта да върнете за него. Искахте просто да предадете този избор на обекта Pizza, но е обичайно изгледът да има аспекти, които не са въплътени в модела и следователно контролерът трябва да посредничи. Ако искате, можете да замените -valueForUndefinedKey: в класа Pizza, но според мен това би било хак. Между другото, след като проверите идентификатора на колоната, не е нужно да използвате skip. Можете също толкова лесно да проверите за празен идентификатор.   -  person Ken Thomases    schedule 17.05.2014
comment
Благодаря ви за обяснението. Изглежда ми добър отговор... Публикувайте го, за да мога да приема :-)   -  person M Jesse    schedule 17.05.2014


Отговори (1)


Не е хак. Така се прави. Трябва да проверите идентификатора на колоната, за да разберете каква стойност на обекта да върнете за него. Искахте просто да предадете този избор на обекта Pizza, но е обичайно изгледът да има аспекти, които не са въплътени в модела и следователно контролерът трябва да посредничи. Ако искате, можете да замените -valueForUndefinedKey: в класа Pizza, но според мен това би било хак. Между другото, след като проверите идентификатора на колоната, не е нужно да използвате "пропускане". Можете също толкова лесно да проверите за празен идентификатор.

person Ken Thomases    schedule 17.05.2014