1

我有一个登录视图控制器,它使用 php/mysql/POST 函数来验证用户是否被授权。一旦获得授权,他们就会进入应用程序。

我的问题是,一旦他们在应用程序中,我如何“获取”他们的用户名并使用它来附加到他们在我的应用程序中上传到我的数据库的任何数据?

我假设我将它附加到我当前的 NSMutableData 字符串中,该字符串带有他们上传的文本块,但我将如何“抓住”这个用户名来附加它?

假设我有两个视图控制器,“login”和“main”,并且内容正在上传到“main”,如何将用户名从“login”视图传递到“main”视图,以便我可以附加它当用户点击上传按钮(位于主视图上)时?

编辑:我希望检索此用户名的位置如下:

-(IBAction)uploadImage:(id)sender  {
NSLog(@"uploadImage");



//and for retrieval





NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *authenticatedUsersName = [defaults objectForKey:@"username"];


NSMutableString *postString = [NSMutableString stringWithString:kPostURL]; 



[postString appendString:[NSString stringWithFormat:@"&%@=%@", kText, textField.text]];



[postString setString:[postString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
4

2 回答 2

1

如果您不关心用户名的安全性,为什么不在NSUserDefaults成功验证后存储用户名?你可以做这样的事情......

//upon authentication...

NSUserDefault *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"username"] == nil) //we haven't saved anything yet
     [defaults setObject:authenticatedUsersName forKey:@"username"];

[defaults synchronize];  //saves the new defaults

//and for retrieval

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *authenticatedUsersName = [defaults objectForKey:@"username"];

我认为这种设计为您提供了更大的灵活性,因此您可以在应用程序中的所有视图控制器中使用用户名。

重新编辑后

为什么你不能在这个函数的某个地方格式化字符串?确切的帖子网址格式是什么?

    -(IBAction)uploadImage:(id)sender  {
    NSLog(@"uploadImage");

    //and for retrieval     

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *authenticatedUsersName = [defaults objectForKey:@"username"];

    //MY CHANGES, CAN YOU DO EITHER OF THESE?

    NSMutableString *postString = [NSMutableString stringWithString:[NSString stringWithFormat:@"%@-%@", kPostURL, authenticatedUsersName]; 

    [postString appendString:[NSString stringWithFormat:@"&%@=%@&%@", kText, textField.text, authenticatedUsersName]];

    [postString setString:[postString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

}
于 2012-05-01T18:02:23.217 回答
1

拥有全局可用变量的另一种方法是使用单例类。

这比使用 NSUserDefaults 的 Convolution 解决方案稍微困难一些,但它更适合某些用例。

以下位置有一个很好的教程: http ://www.galloway.me.uk/tutorials/singleton-classes/

于 2012-05-01T20:46:35.100 回答