在我的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"];
请让我提出您的建议
答案 0 :(得分:5)
由于Objective-C是C的超集,因此一种方法就是简单地创建一个全局变量,就像在C中一样。你想在头文件中声明变量,如下所示:
extern NSString *sessionId;
任何需要使用sessionId
的.m文件都可以#import "Globals.h"
来获取声明。
您还需要在其中一个.m文件中定义变量。例如,您可以在任何函数定义之外将其添加到main.m
:
NSString *sessionId;
另一种方法是使变量成为应用程序委托的属性,因为它已经是一个全局可访问的对象。您需要在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
将是一个不错的选择。