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

У меня есть NSTableview, в этом табличном представлении я заполняю столбцы objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row.

Я хотел бы столбец, который не заполнен. Если я помещаю столбец без идентификатора или идентификатор, который не соответствует ключу, я получаю сообщение об ошибке из-за несовместимости с кодировкой ключа.

Теперь, чтобы обойти это, я добавил столбец с идентификатором «пропустить», я проверяю это условие в своем коде с помощью этого...

-(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, но, на мой взгляд, это будет хаком. Кстати, если у вас есть проверка идентификатора столбца, вам не нужно использовать пропуск. Вы также можете легко проверить наличие пустого идентификатора.   -  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