2010-09-30 2 views
2

Heres код я использую, увидеть свою ошибку послеiPhone, как использовать переменную делегата приложения, чтобы ее можно было использовать как глобальные переменные?

@interface MyAppDelegate : NSObject { 
    NSString *userName; 
} 
@property (nonatomic, retain) NSString *userName; 
... 
@end 

и в файле .M для App делегата можно было бы написать:

@implementation MyAppDelegate 
@synthesize userName; 
... 
@end 

Затем, когда вы хотите получать или написать имя пользователя, можно было бы написать:

MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
someClass.someString = appDelegate.userName; //..to fetch 
appDelegate.userName = ..some NSString..;  //..to write 

предупреждение: тип «идентификатор» не соответствует «MyAppDelegate» протокола

Что мне недостает в моем коде?

ответ

13

Вы должны добавить литую к MyAppDelegate

MyAppDelegate *appDelegate = (MyAppDelegate*)[[UIApplication sharedApplication] delegate];

+0

Добавлен фрагмент кода –

+4

Это ответ - приведение к вашему типу App делегата, как вы тянете ссылку из UIApplication. Тем не менее, если у вас есть много таких видов полей данных, вы должны рассмотреть вопрос о их размещении в синтаксисе диспетчера данных. Сохранение всех ваших данных в качестве свойств делегата приложения не является фантастическим подходом. –

+0

Дэн, я согласен, это не лучшая практика для AppDelegate для таких хостингов. –

1

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

Например:

AppDelegate.h

{ 
    NSString *username; 
} 

@property (strong,nonatomic) NSString *username; 

AppDelegate.m (в блоке) @implementation

@synthesize username; 

AnyViewController.h

#import AppDelegate.h 

AnyViewController.m

//Whatever place you want to access this field value you can use it like. 

AppDelegate *appdel=(AppDelegate *)[[UIApplication sharedApplication] delegate]; 

NSString *unm=appdel.username; 

//You can get the username value here. 
NSLog(@"%@",unm); 
Смежные вопросы