NOOB Проблемы с получением результатов из кода (в частности, с NSComboBox)

Я знаю, что это, вероятно, простой вопрос, но вот что я ломаю голову, чтобы понять это:

Я знаю, что это:

- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)index {
return [midiModelContents objectAtIndex:index];

}

вернет элемент по указанному индексу. Мой вопрос: какой код мне нужно использовать для вызова этой процедуры?

Я пробовал что-то вроде этого:

NSString *curData =(comboBox: midiModel objectValueForItemAtIndex:0);

но я получаю "ошибка: 'comboBox' необъявленный"

Может ли кто-нибудь помочь мне с концепцией, которую я испортил?


person Loren Zimmer    schedule 27.10.2010    source источник


Ответы (1)


Во-первых, вы можете прочитать Objective-C Язык программирования, чтобы изучить правильный синтаксис для отправки сообщений объектам, в том числе себе.

Вы получаете бессмысленное сообщение об ошибке, потому что вы написали (то, что в Objective-C) бессмысленный код. Корректное выражение сообщения Objective-C будет успешно скомпилировано и запущено, но я не думаю, что оно будет делать то, что вы от него ожидаете.

Видите ли (и это второе), comboBox:objectValueForItemAtIndex: обычно не является сообщением, которое вы отправляете себе. Поле со списком отправляет это сообщение вам, когда вы являетесь его источником данных. Источники данных — это вариант шаблона делегирования, подробно описанный в Руководство по основам работы с какао.

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

Каждый программист Cocoa должен прочитать документ Language и Cocoa Fundamentals вместе с Руководство по управлению памятью для Cocoa. Вы должны прочитать все три документа от начала до конца.

Решение вашей непосредственной проблемы заключается в том, чтобы объект, который отвечает на comboBox:objectValueForItemAtIndex:, был источником данных поля со списком. Вы, вероятно, подключите это в IB, в том же пере, где вы создали поле со списком.

Если все это не имеет никакого смысла, то все, что я могу вам посоветовать, это снова прочитать эти документы. Они все объяснят.

Если вы действительно просто хотели спросить себя о значении объекта так же, как это делает поле со списком (т. Е. У вас уже есть поле со списком, и вы намереваетесь получить значение объекта таким же образом для какой-то другой цели), то вам все равно нужно чтобы прочитать документ по языку программирования Objective-C, чтобы узнать правильный синтаксис, чтобы отправить себе это сообщение.

person Peter Hosey    schedule 27.10.2010
comment
Спасибо за точку в правильном направлении. Я начал чтение, которое вы предложили. Я также нашел код, который искал, из вашего объяснения того, как поле со списком отправляет информацию. - person Loren Zimmer; 28.10.2010