2012-03-17 2 views
0

Pls помочь мне с этим:Доступ экземпляр AppDelegate но ошибка: EXC_BAD_ACCESS

AppDelegate имеет аргумент с именем «пользователь»:

@interface AppDelegate : UIResponder <UIApplicationDelegate> 
{ 
    User *user; 
} 
@property (nonatomic, retain) User *user; 

и я инициализировать пользовательский экземпляр в Фрист ViewController :

User *userInfo = [[User alloc] initWithRealName:realName UserId:userId]; 

и установите пользователю AppDelegate'S:

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
appDelegate.user = userInfo; 

Во втором ViewController, я могу получить REALNAME варианты использования, нет никаких проблем:

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
NSString *realName = appDelegate.user.realName; 

Но когда я нажимаю на другой ViewController, и я хочу, чтобы получить REALNAME пользователя, как только сейчас, но является ошибкой: EXC_BAD_ACCESS:

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
User *user = appDelegate.user; 
NSLog(@"I am in noticeDetailViewController:%@",user.realName);***//ERROR*** 

И я хочу знать, почему? и как исправить эту ошибку.

Спасибо!

User.h & User.m 

@interface User : NSObject 
{ 
    NSString *realName; 
    NSString *userId; 
} 

@property (nonatomic, retain)NSString *realName; 
@property (nonatomic, retain)NSString *userId; 
- (id)initWithRealName :(NSString *)realNameArgument UserId :(NSString *)userIdArgument; 
@end 

@implementation User 
@synthesize realName,userId; 

- (id)initWithRealName :(NSString *)realNameArgument UserId :(NSString *)userIdArgument 

{ 
    self = [super init]; 

    if (self) 
    { 
     realName = realNameArgument; 
     userId = userIdArgument;  
    } 
    return self; 
} 

- (void)dealloc 
{ 
    [super dealloc]; 
    [realName release]; 
    [userId release]; 
} 

@end 
+0

вы определили свойство для пользователя? – NeverBe

+0

Yeap, я уверен с этим. – jxdwinter

ответ

0

AppDelegate не сохраняет user, поэтому он будет освобождён, прежде чем пытаться получить доступ к нему в:

NSLog(@"I am in noticeDetailViewController:%@",user.realName);***//ERROR*** 

Так Изменение AppDelegate путем создания удерживаемой собственности:

@interface AppDelegate : UIResponder <UIApplicationDelegate> { 
// ... 
@property (retain, nonatomic) User*user; 
// .. 

и Дон Не забудьте синтезировать его.

изменить Также метод инициализации с пользователем:

- (id)initWithRealName:(NSString *)realNameArgument UserId:(NSString *)userIdArgument 
{ 
    self = [super init]; 
    if (self) { 
     self.realName = realNameArgument; 
     self.userId = userIdArgument;  
    } 
    return self; 
} 
+0

Я пишу @property (неатомный, сохраняю) Пользователь * пользователя в User.h, а также синтезирую его в User.m – jxdwinter

+0

Вы пытались изменить метод init 'User'? Также вы получаете ту же ошибку при регистрации только 'user':' NSLog (@ «Я нахожусь в заметкеDetailViewController:% @», пользователь); ' – sch

+0

... Я забыл использовать self. и снова нет ошибки. Большое спасибо! – jxdwinter

Смежные вопросы