如何将从json检索到的数据从一个视图传递到另一个视图?

时间:2016-09-14 10:21:25

标签: ios objective-c google-signin

以下是我的代码,我用来从谷歌帐户获取数据,我想在其他视图中使用电子邮件地址作为登录ID。

此代码位于我的FirstViewController,我想在其他视图中使用电子邮件。

请帮助:)

- (void)finishedWithAuth:(GTMOAuth2Authentication *)auth
               error:(NSError *)error {
if (error) {
    return;
}


NSString  *accessTocken = [auth valueForKey:@"accessToken"]; // access tocken pass in .pch file

NSLog(@"%@",accessTocken);
NSString *str=[NSString stringWithFormat:@"https://www.googleapis.com/oauth2/v1/userinfo?access_token=%@",accessTocken];
NSString *escapedUrl = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",escapedUrl]];
NSString *jsonData = [[NSString alloc] initWithContentsOfURL:url usedEncoding:nil error:nil];
NSDictionary *jsonDictionary = [NSJSONSerialization JSONObjectWithData:[jsonData dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:&error];
NSString *userId=[jsonDictionary objectForKey:@"email"];

NSLog(@" user data %@",jsonData);
NSLog(@"Received Access Token:%@",auth);
NSLog(@"email id : %@ ",userId);

GTLServicePlus* plusService = [[GTLServicePlus alloc] init];
plusService.retryEnabled = YES;
[plusService setAuthorizer:auth];
GTLQueryPlus *query = [GTLQueryPlus queryForPeopleGetWithUserId:userId];

[plusService executeQuery:query completionHandler:^(GTLServiceTicket *ticket,GTLPlusPerson *person,NSError *error) {
    if (error) {
        GTMLoggerError(@"Error: %@", error);
    } else {
        // Retrieve the display name and "about me" text
       // [person retain];
        NSString *description = [NSString stringWithFormat:
                                 @"%@\n%@", person.displayName,
                                 person.aboutMe];
        GTLPlusPersonImage *image  =person.image;
        NSString *strimag=[image valueForKey:@"url"];

        // [self setImageFromURL:[NSURL URLWithString:strimag]];
        NSData *receivedData = [NSData dataWithContentsOfURL:[NSURL URLWithString:strimag]];

        UIImage *img = [[UIImage alloc] initWithData:receivedData ];
        receivedData=UIImageJPEGRepresentation(img,50);
        NSLog(@"description %@",description);
    }
}];
 if ([GPPSignIn sharedInstance] == true) {
   [self performSegueWithIdentifier:@"pass" sender:self];
      }

  [[GPPSignIn sharedInstance] signOut];
 }

1 个答案:

答案 0 :(得分:1)

以下是一些在应用程序中保存数据的方法。

  1. 使用sqlite创建本地数据库或coredata都提供了在本地保存数据的便利性,在使用之前请找到使用这些数据库的不同情况。
  2. 使用NSUserDefaluts但未重新录制,因为NSUserDefaults并不意味着存储敏感信息以获取更多信息,请参阅imp link如果您仍然可以参见示例。
  3. 使用NSUserDefaluts存储数据:

    [[NSUserDefaults standardUserDefaults]setObject:self.textfield.text forKey:@"yourKey"];
    

    要在app中的任何位置获取数据:

    object = [[NSUserDefaults standardUserDefaults] valueForKey:@"yourKey"];