Попытка получить доступ к переменным / свойствам делегата приложения - PullRequest
3 голосов
/ 28 августа 2009

Я использую переменную / свойство моего делегата приложения в качестве глобального. (Я не хочу иметь дело с синглтон-классом.)

Я пытаюсь написать оператор #define в своем классе Application Delegate. Если я наберу:

  [UIApplication sharedApplication]

в моем классе делегатов приложения, подсказка кода не распознает sharedApplication. Но если я наберу то же самое в классе viewController, появится сообщение «sharedApplication».

Чтобы определить NSMutableDictionary в моем applicationDelegate.h (или .m?), Я пишу:

#define MyDictionary [[[UIApplication sharedApplication] delegate] stateDictionary]

Тогда, если я попытаюсь использовать его в другом классе:

[[MyDictionary objectForKey:@"California"] largestCity];

Я получаю ошибку, что MyDictionary должен быть объявлен первым. Я действительно смущен множеством понятий здесь.

Ответы [ 2 ]

8 голосов
/ 28 августа 2009

Я почти уверен, что кто-то ответит лучше, но вот быстрый:

Допустим, ваше приложение называется myApplication. Присвойте «глобальное» свойство MyApplicationDelegate, и тогда оно будет доступно из любого места, например:

// get reference to app delegate
MyApplicationDelegate *appDelegate = (MyApplicationDelegate *)[[UIApplication sharedApplication] delegate]

Property *myProperty = appDelegate.property;

Также убедитесь, что вы ссылаетесь на файл MyApplicationDelegate в заголовке:

#import "MyApplicationDelegate.h"

Существует более длительная дискуссия, если использование "глобальных" объектов в целом является хорошим дизайном, но сейчас я не буду вдаваться в подробности.

2 голосов
/ 29 августа 2009

Я всегда добавляю категорию к UIApplication, например:

@interface UIApplication (MyAppDelegate)
+(MyAppDelegate*)sharedMyAppDelegate;
@end

Таким образом, мне вообще не нужно беспокоиться о приведении типов. Я часто определяю и реализую эту категорию в том же файле, что и сам класс MyAppDelegate. Так что это заголовок I #import во всем. Все, что вы можете добавить его в свой файл MyProject_Prefix.chp.

Синглтоны не плохи, если ваша архитектура должным образом наслоена (И да, она полностью тестируема) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...