2013-10-25 3 views
-6

Мне нужно получить доступ к userEMail (NSString) в Class2.m, но его возвращающий null.Доступ к NSString из другого .m-файла

Class1.h:

@interface AuthController : UIViewController 
{ 

    @public NSString *const userPassword; 
    @public NSString *const userEMail; 
    @public NSString *const userFullName; 

} 

@property (nonatomic, strong) NSString *userEMail; 

Тогда в Class1.m им экономить USEREMAIL.

Class2.m:

AuthController *ac = [[AuthController alloc] init]; 
NSLog(@"%@", ac.userEMail); 
+0

Где вы его устанавливаете? Вы вызываете '[ac setUserEMail: @" [email protected]]; ' – Popeye

+0

Синтезировать userEmail в файле first class.m – user1673099

+0

В Class1.m im, устанавливая его. Протестировало его значение прямо там с NSLog и его ок. – user2851844

ответ

-2

Я просто поставить основной шаг здесь, изменить его в соответствии с вашими требованиями.

Вам просто нужно написать

@property (nonatomic, strong) NSString *userEMail; 

в вашем first.h файле

записи second.h файл

@property (nonatomic, strong) NSString *gotUserEMail; 

И ваш first.m файл

у вас есть gotUserEMail строку с некоторым значением.

передать его anotherViewController такой Лик,

secondViewController *addView = [[secondViewController alloc] init]; 
addView.gotUserEMail = userEMail; 

. 
. 
. 
. 

Эдите

Хорошо, тогда вам нужно использовать NSUserDefault.

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
[userDefaults setValue:userEMail forKey:@"myEmailString"]; 
[userDefaults synchronize]; 

получить в любом месте в вашем проекте,

NSUserDefaults *data = [NSUserDefaults standardUserDefaults]; 
NSString *gotEmail = [data floatForKey:@"myEmailString"]; 
+0

Мне нужно получить значение userEMail в нескольких классах, поэтому неправильно отправлять данные в каждый класс – user2851844

+0

@ user2851844 - проверить мой отредактированный ответ :) – iPatel

+0

Спасибо. Он работает;) – user2851844

-2

После прочтения комментария на другой ответ

мне нужно получить значение USEREMAIL в нескольких классах, так что его неправильно передавать данные в каждый класс

Это похоже на то, что вы после одноэлементного класса. Так что попробуйте что-то вроде этого

AuthObject.h

@interface AuthObject : NSObject 

@property (nonatomic, strong) NSString *userEMail; 

+ (AuthController*)authInstance; 

@end 

AuthObject.м

#import "AuthObject.h" 

@implementation AuthObject 

@synthesize userEMail = _userEMail; 

static AuthObject *authObjectSharedInstance = nil; 

+ (AuthObject *)authInstance 
{ 
    static dispatch_once_t instanceToken; 
    dispatch_once(&instanceToken, ^{ 
     authObjectSharedInstance = [[AuthObject alloc] init]; 
    }); 
    return authObjectSharedInstance; 
} 

@end 

затем в другом методе в другом классе до тех пор, как вы импортировали AuthObject.h где-то можно сделать

- (void)someMethodIMadeUpInClass1 
{ 
    AuthObject *authObj = [AuthObject authInstance]; 
    [authObj setUserEMail:@"[email protected]"]; 
} 

тогда в совершенно другом классе вы можете сделать

- (void)someMethodIMadeUpInClass2 
{ 
    AuthObject *authObj = [AuthObject authInstance]; 
    NSLog(@"my email : %@", [authObj userEMail]; 
} 

В теории, если вы создаете одноэлементный класс и не проходите через sharedInstance (authInstance здесь), тогда этот код нарушается. Попытка скрыть эту разорванность просто вызовет боль позже. Вот почему я выбрал одноэлементный класс, используя NSUserDefaults.

+1

@downvoter Пожалуйста, объясните причину понижения. Я мог бы привести много примеров (ссылки, статьи и т. Д.), Где синглтон был бы идеальным здесь. Так почему downvote? – Popeye

+0

Снова у этого есть еще один downvote, но причины не остались. Просьба указать причину понижения, и я могу исправить, где это возможно. – Popeye

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