使NSString全局到整个项目iPhone

时间:2012-01-02 06:51:17

标签: iphone objective-c ios

在我的iPhone应用程序中,登录到Web服务时,我得到的会话ID在每次登录时都会被更改。我想为其他视图控制器使用该会话ID,这样我就不必一次又一次地使用用户名密码,而且还必须使用其他Web服务链接的会话ID来获取所需的JSON数据到iPhone。 / p>

我应该将其定义为宏还是有其他方法可以做到这一点。

session:"7e5085390e1877fd83f7346093c8304b"

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

登录网址用作:

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"];

请让我提出您的建议

4 个答案:

答案 0 :(得分:5)

作为全局变量

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

Globals.h

extern NSString *sessionId;

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

您还需要在其中一个.m文件中定义变量。例如,您可以在任何函数定义之外将其添加到main.m

的main.m

NSString *sessionId;

作为应用程序代理属性

另一种方法是使变量成为应用程序委托的属性,因为它已经是一个全局可访问的对象。您需要在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);

答案 1 :(得分:1)

使用它         设置会话

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

并得到这样的

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

答案 2 :(得分:1)

要使全局变为NSString,您应该在NSString

中声明此AppDelegate Class

//在NSString Class

中声明Delegate

假设你有TestAppDelegate

//现在您可以访问该字符串对象,如下所示

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

//现在您可以在整个App中的任何类中访问该字符串

appDelegate.stringObject;

答案 3 :(得分:0)

由于您要将其用作登录项,因此无法将其添加为宏。我想NSUserDefault将是一个不错的选择。