使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。