附加的問題:接收 現在總數據長度是89973.可是轉換成用下面的代碼的字符串返回一個(空)的字符串。 解決了它:已將編碼更改爲NSASCIIStringEncoding,現在它可以工作。NSURLConnection的不觸發didReceiveData,但返回的數據是零
NSString *responseString = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];
NSLog(@"Received string: %@", responseString);
解決問題: 我試圖登錄到網站,並獲得返回的數據。 一切工作正常,重定向工作就像他們應該。
didReceiveData也被多次調用,但奇怪的是:數據長度爲零。即使我NSLog從didReceiveData內的數據長度。
下面是.m和.h文件以及生成的NSLog信息。
我是Objective-C的新手,我試圖解決這個問題好幾個小時了,但我似乎無法找到原因。
我希望有人可以找我。
這是.m文件
#import "SiteConnection.h"
@implementation SiteConnection
@synthesize username;
@synthesize password;
// Other
- (void) printInstanceVars {
}
- (void) getInformation {
// Enable Network Indicator
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
// Set the request URL
url = [NSURL URLWithString:@"http://url.com"];
// Create the request using the URL defined above
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url];
// Change User-Agent to a Browser
[request setValue:@"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:13.0) Gecko/20100101 Firefox/13.0.1" forHTTPHeaderField:@"User-Agent"];
// Change method to POST
[request setHTTPMethod:@"POST"];
// Create POST string
NSString *requestData = [NSString stringWithFormat:@"data=value"];
// Append POST string to the request
[request setHTTPBody: [requestData dataUsingEncoding:NSUTF8StringEncoding]];
// Initialize the connection
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];
// Start the connection
[connection start];
}
- (NSURLRequest *)connection:(NSURLConnection *)connection
willSendRequest:(NSURLRequest *)request
redirectResponse:(NSURLResponse *)response
{
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
int statusCode = [httpResponse statusCode];
// http statuscodes between 300 & 400 is a redirect ...
if (response && statusCode >= 300 && statusCode < 400) {
NSLog(@"Redirecting to : %@ (%u)", [request URL], statusCode);
}
return request;
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
[receivedData setLength:0];
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
NSLog(@"Response: %u (%@)", [httpResponse statusCode], [NSHTTPURLResponse localizedStringForStatusCode:[httpResponse statusCode]]);
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[receivedData appendData:data];
NSLog(@"Receiving data... Length: %d", [receivedData length]);
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
NSLog(@"Error: %@", [error localizedDescription]);
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
// Hide Network Indicator
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
// Display data length
NSLog(@"Total received data: %d", [receivedData length]);
// Convert data into string and display it
NSString *responseString = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];
NSLog(@"Received string: %@", responseString);
//NSLog(@"Cookies: %@", [[NSHTTPCookieStorage sharedHTTPCookieStorage] description]);
}
這是.h文件
#import <Foundation/Foundation.h>
@class StatusViewController;
@interface SiteConnection : NSObject {
NSString *username;
NSString *password;
NSURL *url;
NSMutableData *receivedData;
}
@property NSString *username;
@property NSString *password;
// Other
- (void) printInstanceVars;
- (void) getInformation;
@end
這是造成的NSLog:
2012-07-02 15:41:12.578 Vodafone[25051:11303] Response: 200 (no error)
2012-07-02 15:41:12.578 Vodafone[25051:11303] Receiving data... Length: 0
2012-07-02 15:41:12.580 Vodafone[25051:11303] Receiving data... Length: 0
2012-07-02 15:41:12.580 Vodafone[25051:11303] Receiving data... Length: 0
2012-07-02 15:41:12.582 Vodafone[25051:11303] Receiving data... Length: 0
2012-07-02 15:41:12.583 Vodafone[25051:11303] Receiving data... Length: 0
2012-07-02 15:41:12.585 Vodafone[25051:11303] Receiving data... Length: 0
2012-07-02 15:41:12.586 Vodafone[25051:11303] Receiving data... Length: 0
2012-07-02 15:41:12.587 Vodafone[25051:11303] Receiving data... Length: 0
2012-07-02 15:41:12.590 Vodafone[25051:11303] Receiving data... Length: 0
2012-07-02 15:41:12.590 Vodafone[25051:11303] Receiving data... Length: 0
2012-07-02 15:41:12.591 Vodafone[25051:11303] Receiving data... Length: 0
2012-07-02 15:41:12.592 Vodafone[25051:11303] Receiving data... Length: 0
2012-07-02 15:41:12.596 Vodafone[25051:11303] Receiving data... Length: 0
2012-07-02 15:41:12.601 Vodafone[25051:11303] Receiving data... Length: 0
2012-07-02 15:41:12.605 Vodafone[25051:11303] Receiving data... Length: 0
2012-07-02 15:41:12.608 Vodafone[25051:11303] Receiving data... Length: 0
2012-07-02 15:41:12.608 Vodafone[25051:11303] Total received data: 0
2012-07-02 15:41:12.608 Vodafone[25051:11303] Received string:
爲什麼 「其他」 appendData ...?你只是放鬆第一幀。 只是如果並追加所有案例,而不是如果/其他 –
我是多麼愚蠢......閱讀你的答案讓我想:當然,是的。 非常感謝!現在解決我的下一個問題。 – Werner
luxsyher你知道receivedData是可變數據 –