“"Объекты" могут не реагировать на предупреждения "функций”"

StackOverflow https://stackoverflow.com/questions/4659974

  •  09-10-2019
  •  | 
  •  

Вопрос

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

AwesomeBoxList.h:

    #import <Cocoa/Cocoa.h>
@interface AwesomeBoxList : NSObject 
{
  IBOutlet NSComboBox *ComboBoz;
}
-(NSArray *) getStringzFromTxtz;
- (void) awesomeBoxList;
@end

AwesomeBoxList.m:

#import "AwesomeBoxList.h"

@implementation AwesomeBoxList

-(NSArray *)getStringzFromTxtz 
{
...
return combind;
}

- (void) awesomeBoxList
{
 [ComboBoz setUsesDataSource:YES];


 [ComboBoz setDataSource:

[ComboBoz getStringzFromTxtz]: //'NSComboBox' may not respond to 'getStringzFromTxtz'

[ComboBoz comboBox:(NSComboBox *)ComboBoz objectValueForItemAtIndex: 

 [ComboBoz numberOfItemsInComboBox:(NSComboBox *)ComboBoz]]];


        /*'NSComboBox' may not respond to '-numberOfItemsInComboBox:'
   'NSComboBox' may not respond to '-comboBox:objectValueForItemAtIndex:'
   'NSComboBox' may not respond to '-setDataSource:'
  */
 }

@end

Итак, со всеми этими ошибками и моими все еще поверхностными знаниями Obj-C, я, должно быть, допускаю какую-то ошибку n00b.

Спасибо за помощь.

Это было полезно?

Решение

Похоже, здесь в целом наблюдается большая путаница, в основном проявляющаяся в ваших последних (4) строках кода.Вы знаете, что символ ':' используется для передачи аргументов методам, а не для завершения строки?По сути, вы последовательно соединяете эти последние 4 строки таким образом, что это не имеет никакого смысла.Что касается конкретных предупреждений, getStringzFromTxtz - это метод, который вы определили в AwesomeBoxList, а не метод NSComboBox.Количество элементов в комбинированном блоке:и поле со списком:objectValueForItemAtIndex:являются Протокол NSComboBoxDataSource методы, предназначенные для реализации вашим классом от имени NSComboBox, а не методы NSComboBox.Я бы порекомендовал немного почитать о делегатах и протоколах.

Разработать:Для того чтобы ваш класс AwesomeBoxList мог использовать NSComboBox, он должен предоставить в поле со списком информацию, которую поле со списком должно знать.Во вселенной Apple подобные ситуации обычно обрабатываются с помощью Шаблон проектирования делегирования.В частности, поле со списком должно знать сколько элементов он будет показывать а также объектное представление для каждого из показанных элементов.Поле со списком объявляет интерфейс для выполнения этого в Протокол NSComboBoxDataSource.Предоставляя эту информацию, вы выступаете в качестве источника данных для поля со списком.Вы можете указать поле со списком, что оно должно передавать свои данные вашему классу, установив себя в качестве его свойства DataSource в Interface Builder или с помощью вызова

[ComboBoz setDataSource:self];

откуда-то из реализации вашего AwesomeBoxList.Это гарантирует, что поле со списком вызовет методы в вашем классе для заполнения себя информацией.Есть два метода, которые должен реализовать ваш класс AwesomeBoxList, и которые будут вызываться полем со списком:

- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)index {
    switch (index) {
        // Return some object that is represented by index in the combo box
    }
}

- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox {
    // return theNumberOfItemsInYourComboBox;
}

Обеспечение осмысленной реализации - это все, что вам нужно сделать, чтобы заполнить поле со списком данными.Я не знаю подробностей того, чего вы здесь хотите, но это тот шаблон, которому вы хотите следовать.Надеюсь, это поможет немного больше.

Другие советы

Что ж, getStringzFromTxtz не будет работать при отправке в экземпляр NSComboBox, поскольку этот метод объявлен и определен в вашем классе AwesomeBoxList.Этот метод не будет найден во время выполнения.

Кроме того, я думаю, вам, возможно, потребуется разобраться с делегатами и источниками данных - другие методы являются частью протокола NSComboBoxDataSource.Ознакомьтесь с Руководством по программированию со списком в документации для получения примеров.

Эти методы не существуют. Смотрите документацию NSCombobobox для получения дополнительной информации.

Вместо:

Comboboz Combobox: (NSCombobox *) Comboboz ObjectValueForitematindex: [Comboboz NumberofitemsinCombobox: (NSCombobobox *) Comboboz]];

Пытаться:

[Combobox ObjectValues] ObjectatIndex: [Combobox Numberoftems] - 1];

Также обратите внимание, что Конвенция платформы является использование строкой буквы в начале Ивара.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top