2011-01-11 117 views
2

我正在將一個基本HTTP授權標頭添加到請求中,但需要將authString編碼爲Base64。有關信息,由於產生了過多的401錯誤,我無法使用didReceiveAuthenticationChallenge。iPhone 3.2 Base64編碼

以下代碼在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]; 

在我的第一行代碼上面我得到的NSData不會爲「base64Encoding」迴應警告。

所以我已經下載了定製類的NSData + Base64編碼從這裏: http://cocoawithlove.com/2009/06/base64-encoding-options-on-mac-and.html

可是......我不知道如何使用這個類來我的NSString(authString)轉換。請幫忙?!

我想下面的代碼行應該解決: NSString *authString = [[[NSString stringWithFormat:@"%@:%@", user, password] dataUsingEncoding:NSUTF8StringEncoding] base64EncodedString];

,但我得到以下信息:

*終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因是:「 - [NSConcreteMutableData base64EncodedString ]:發送到實例的無法識別的選擇器

我錯過了導入或其他內容嗎?

P.S.這是我在這裏的第一個問題,所以在我身上輕鬆點!

回答

2

NSString有一個-dataUsingEncoding:方法,您可以使用該方法將NSString實例轉換爲NSData實例。之後,您可以使用MG的Base64類別。

+0

你的意思是把這行代碼改成這樣的東西? NSString * authString = [[[NSString stringWithFormat:@「%@:%@」,user,password] dataUsingEncoding:NSUTF8StringEncoding] dataFromBase64String]; NSString * authString = [[[NSString stringWithFormat:@「%@:%@」,user,password] dataUsingEncoding:NSUTF8StringEncoding] base64EncodedString]; – 2011-01-11 15:07:41