Как правильно обращаться к локальным переменным в делегате? - PullRequest
0 голосов
/ 04 марта 2010

Я пытаюсь получить доступ к NSMutableArray, который является членом данных моего класса AppDelegate.Он синтезирован в реализации и представляет собой массив пользовательского класса, который имеет элемент данных NSString «имя».

В настоящее время я использую его для заполнения табличного представления (подпункта), например:

cell.textLabel.text = [[[delegate contentArray] objectAtIndex:indexPath.row] name];

Это работает, но я получаю предупреждение:

warning: no '-contentArray' method found

Он не скомпилируется как:

cell.textLabel.text = [[delegate.contentArray objectAtIndex:indexPath.row] name];

В таком случае я получаю:

error: request for member 'contentArray' in something not a structure or union

Как правильно обращаться к массиву в делегате?

Обновление: Чтобы объявить delegate, в заголовочном файле контроллера табличного представления я включаю @class MainAppDelegate; и в @interface я объявляю элемент данных MainAppDelegate *delegate;.В табличном представлении контроллера @implementation я делаю @synthesize delegate;.

Ответы [ 3 ]

1 голос
/ 04 марта 2010

Я думаю, что решил это.Заголовочный файл MainAppDelegate.h не был импортирован в файл .m контроллера табличного представления.Полагаю, мне не имеет смысла импортировать и основной файл AppDelegate.h, и файл ViewController.h табличного представления.

1 голос
/ 04 марта 2010

Чтобы объявить delegate, в заголовочный файл контроллера табличного представления я включаю @class MainAppDelegate;, а в @interface я объявляю [n переменная экземпляра] MainAppDelegate *delegate;.В контроллере табличного представления @implementation я делаю @synthesize delegate;.

Итак, вы заранее объявили имя класса MainAppDelegate и использовали его для объявления переменной экземпляра.Поскольку вы @synthesizing свойство, я предполагаю, что вы также объявили одно из них.

В настоящее время я использую его, чтобы заполнить табличное представление (SubView), например:1017 * Это работает, но я получаю предупреждение:

warning: no '-contentArray' method found

Он не скомпилируется как:

cell.textLabel.text = [[delegate.contentArray objectAtIndex:indexPath.row] name];

В этом случае я получаю:

error: request for member 'contentArray' in something not a structure or union

Это потому, что компилятор не знает, какие методы или свойства имеет delegate.Вы объявили имя его класса, но компилятор больше ничего о нем не знает, потому что вы не предоставили @interface для этого класса.

Решение состоит в том, чтобы #importфайл заголовка для класса делегата в файл реализации класса контроллера табличного представления, вероятно, сразу после #import с использованием собственного заголовка класса контроллера табличного представления.

Также я подозреваю, что массив более правильно принадлежит к табличному представлениюконтроллер, чем делегату приложения, но я не знаю достаточно о Cocoa Touch, чтобы сказать наверняка.

0 голосов
/ 04 марта 2010

Вам придется привести делегата к правильному типу. Как это:

cell.textLabel.text = [[[(MyAppDelegate*) delegate contentArray]
    objectAtIndex:indexPath.row] name]
...