iPhone 3.2 Base64编码

时间:2011-01-11 14:31:13

标签: iphone authentication encoding base64

我在请求中添加了一个Basic HTTP Authorization Header,但需要将authString编码为Base64。有关信息,由于产生了过多的401错误,我无法使用didReceiveAuthenticationChallenge。

以下代码在iOS 4.2中运行良好,但在iOS 3.2上无效(我想支持此功能)。

NSString *authString = [[[NSString stringWithFormat:@"%@:%@", user, password] dataUsingEncoding:NSUTF8StringEncoding] base64Encoding];

authString = [NSString stringWithFormat: @"Basic %@", authString];

NSMutableURLRequest* request =
[[NSMutableURLRequest alloc] initWithURL: url 
                             cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
                         timeoutInterval: 30];

[request setValue: authString forHTTPHeaderField: @"Authorization"];

connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];

authString = [NSString stringWithFormat: @"Basic %@", authString]; NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL: url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval: 30]; [request setValue: authString forHTTPHeaderField: @"Authorization"]; connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];

在上面代码的第一行,我收到警告,NSData不会响应'base64Encoding'。

所以我从这里下载了自定义类NSData + Base64: http://cocoawithlove.com/2009/06/base64-encoding-options-on-mac-and.html

但是......我不知道如何使用这个类转换我的NSString(authString)。请帮帮忙?!

我认为以下代码行应该修复:

但我得到以下信息:

* 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [NSConcreteMutableData base64EncodedString]:无法识别的选择器发送到实例

我是否错过了导入或其他什么?

P.S。这是我在这里的第一个问题,所以对我来说很容易!!

2 个答案:

答案 0 :(得分:2)

NSString-dataUsingEncoding:方法,可用于将NSString个实例转换为NSData个实例。之后,您可以使用MG的Base64类别。

答案 1 :(得分:0)

您是否创建了类别以在NSData类中使用BASE64Encoding方法?在这里我做了一个简单创建类别的教程,基本上是现有类的修改,在这种情况下NSData:http://www.donttouchmycode.com/objective-c-class/extending-an-existing-class-with-categories我希望这可以帮助你。