-1

我是 iOS 开发的新手。

在身份验证时如何以及在何处存储我们从服务器中提取的值?我正在开发这个使用登录屏幕的应用程序。一旦您尝试登录,它会向 API 发送 JSON 帖子,然后服务器会做出响应。我们得到一个唯一的用户 ID。我应该如何以及在哪里存储该唯一用户 ID,以便我可以使用它跨不同视图提取数据?那是在登录后,它转到另一个视图控制器。有没有可以在任何视图控制器中访问的全局变量或存储?

谢谢。

4

4 回答 4

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);
}
于 2013-07-01T11:19:29.027 回答
0

你可以用NSUserDefaults这个。为每个用户自动创建一个默认数据库。我们可以保存浮点数、双精度数、整数、布尔值、UrLs 等。我们可以使用以下方法来设置和检索:

设置 :

- (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

于 2013-07-01T11:18:52.207 回答
0

您可以使用人们提供的 NSUserDefaults、Keychain 或 Singleton。但这取决于您的应用程序。

你想一直保留数据吗?甚至应用程序都被杀死了?然后 NSUserDefaults 和 Keychain (更安全)就可以了。当应用程序被杀死时,单例将丢失数据。

但我更感兴趣的是你的应用程序本身。对于您的网络服务,它是否只需要用户 ID?没有会议?或其他可以阻止人们在知道地址和 ID 并且不知道登录 ID 和密码的情况下调用您的 Web 服务的事情?

于 2013-07-01T11:37:54.093 回答
0

有2个场景

1.您想在应用程序的多次运行中保存值

这意味着一旦你得到了 userId,你需要保存它,这样下次用户运行应用程序时,就不需要登录了。

不要在这个场景中使用 NSUserDefault

保存值。如果您的用户 ID(或用户名或密码)是敏感信息,并且 NSUserDefault 以纯文本形式存储数据。任何人都可以轻松地从应用程序包中检索信息。

在这种情况下,总是使用KeyChain来保存数据。您还可以阅读为什么首选钥匙串而不是 NSUserDefault.

2.您只需要在应用程序当前运行期间保存该值。

在这种情况下,忘记NSUserDefault,忘记 KeyChains,只需在应用程序委托文件中创建一个属性,可以从应用程序内部的任何位置访问它。

简而言之,永远不要使用 NSUserDefault 来存储敏感信息(如密码、卡号等)。辉煌在这里解释。

于 2013-07-01T11:39:29.213 回答