使NSString全局到整个项目iPhone

在我的iPhone应用程序中,在login到Web服务时,我得到一个会话ID,每次login都会被更改。 我想为其他视图控制器使用该会话ID,以便我不必一次又一次地使用用户名密码,而且还必须使用Web服务的其他链接的会话ID才能将所需的JSON数据提供给iPhone。

我应该把它定义为一个macros还是有另一种方法来做到这一点。

session:"7e5085390e1877fd83f7346093c8304b" 

如果可以用macros来完成,那我该如何实现呢?

在loginurl用作:

 NSString *urlAsString = [NSString stringWithFormat:@"http://url/rest/mobile/session"]; NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url]; [urlRequest setTimeoutInterval:30.0f]; [urlRequest setHTTPMethod:@"POST"]; [urlRequest addValue:user forHTTPHeaderField:@"uid" ]; [urlRequest addValue:password forHTTPHeaderField:@"passwd" ]; 

在获取其他视图的数据时:

 NSString *urlAsString = [NSString stringWithFormat:@"http://url/rest/assetgroups/7e5085390e1877fd83f7346093c8304b"]; 

请让我有你的build议

作为一个全局variables

由于Objective-C是C的超集,因此一种方法就是像在C中一样简单地创build一个全局variables。您想在头文件中声明variables,如下所示:

Globals.h

 extern NSString *sessionId; 

任何需要使用sessionId .m文件都可以#import "Globals.h"来获取声明。

您还需要在一个.m文件中定义variables。 例如,你可以把它添加到main.m ,在任何函数定义之外:

的main.m

 NSString *sessionId; 

作为应用程序委托属性

另一种方法是使variables成为应用程序委托的属性,因为这是一个全局可访问的对象。 你需要在AppDelegate.h声明它:

AppDelegate.h

 @interface AppDelegate @property (strong, nonatomic) NSString *sessionId; // other properties and methods of AppDelegate here @end 

并在AppDelegate.m综合它:

 @implementation AppDelegate { // ivars here } @synthesize sessionId = _sessionId; // Rest of AppDelegate method definitions and synthesizers here @end 

你可以像这样访问属性:

 ((AppDelegate *)[UIApplication sharedApplication].delegate).sessionId = whatever(); NSLog(@"session id = %@", ((AppDelegate *)[UIApplication sharedApplication].delegate).sessionId); 

使用这个设置会话

  NSUserDefaults *userDefault=[NSUserDefaults standardUserDefaults]; [userDefault setObject:@"7e5085390e1877fd83f7346093c8304b" forKey:@"session"]; 

并得到这样的

  NSUserDefaults *userDefault=[NSUserDefaults standardUserDefaults]; NSLog(@"%@",[userDefault objectForKey:@"session"]); 

为了让Global成为NSString ,你应该在AppDelegate Class声明这个NSString

//在Delegate类中声明NSString

假设你有TestAppDelegate

//现在你可以访问该string对象如下

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

//现在你可以在整个应用程序的任何类中访问该string

 appDelegate.stringObject; 

正如您将要使用它作为login项目,您不能将其添加为macros。 我猜NSUserDefault将是一个不错的select。