我是iOS开发的新手。
如何以及在何处存储我们在身份验证时从服务器提取的值?我正在开发这个使用登录屏幕的应用程序。尝试登录后,它会向API发送一个JSON帖子,服务器会响应。我们找回了一个独特的用户ID。我应该如何以及在何处存储该唯一用户ID,以便我可以使用它来跨不同视图提取数据?那是在登录之后,它会转到另一个视图控制器。我可以在任何视图控制器中访问全局变量或存储吗?
感谢。
答案 0 :(得分:1)
您可以将数据存储在字典中,然后您可以使用“用户默认值”传递这样的值
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString *data=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
NSArray *dataArr=[data JSONValue];
for (int i=0; i<[dataArr count]; i++) {
NSDictionary *dict=[dataArr objectAtIndex:i];
NSString *codeV=[dict valueForKey:@"userid"];
[NSUserDefault StandasdUserDefault]setObject: dict forKey :@"logindata"];
NSLog();
}
NSLog(@"%@", json_string);
另一种观点
-(void) ViewDidLoad{
NSDictionary *dict = [NSUserDefault StandardUserDefault]objectForKey:@"logindata"]
NsLog(@"dict is %@",dict);
}
答案 1 :(得分:0)
您可以使用NSUserDefaults
。
为每个用户自动创建默认数据库。
我们可以保存花车,双打,整数,布尔,UrL等。
我们可以使用以下方法来设置和检索:
设置:
- (void)setInteger:(NSInteger)value forKey:(NSString *)defaultName
要检索:
- (NSInteger)integerForKey:(NSString *)defaultName
NSUserDefaults
的完整说明如下:
http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference.html
答案 2 :(得分:0)
您可以使用人们提供的NSUserDefaults,Keychain或Singleton。但这取决于你的应用程序。
您是否希望始终保留数据?即使应用程序被杀?那么NSUserDefaults和Keychain(更安全)就可以了。当应用程序被杀时,Singleton将丢失数据。
但我更感兴趣的是你的应用本身。对于您的Web服务,它只需要用户ID吗?没有会话?或者其他可以防止人们在知道地址和身份证件而又不知道登录ID和密码的情况下调用您的网络服务的事情?
答案 3 :(得分:0)
有两种情况
这意味着一旦你获得userId,你需要保存它,以便下次用户运行应用程序时,无需登录。
请勿在此场景中使用NSUserDefault
保存值。如果您的用户ID(或用户名或密码)是敏感信息,NSUserDefault以纯文本格式存储数据。任何人都可以轻松地从应用程序包中检索信息。
在此方案中,始终使用KeyChain来保存数据。 You can also read why keychain is preferred over NSUserDefault
。
在这种情况下,忘记NSUserDefault
,忘记KeyChains,只需在应用程序委托文件中创建一个属性,该属性可以从应用程序内的任何位置访问。
简而言之,绝不使用NSUserDefault存储敏感信息(如密码,卡号等)。 Brilliant解释here。