我有这段代码
NSString *tr = [self sendUrl:@"http://google.com/"];
但由于某种原因,“ tr ”在执行后仍然为零。我做错了什么?
sendUrl:
- (NSString *)sendUrl:(NSString *) uri {
NSLog(@"Requesting URI 1 ...");
// Prepare URL request to download statuses from Twitter
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:uri]];
NSLog(@"Requesting URI 2 ...");
// Perform request and get JSON back as a NSData object
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSLog(@"Requesting URI 3 ...");
// Get JSON as a NSString from NSData response
NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
NSLog(@"Requesting URI 4 ...");
return json_string;
}
答案 0 :(得分:3)
你绝对确定response
不是零吗?如果您向Google或其他地方提出的请求失败,则响应将设置为nil,错误将包含一些有助于您诊断错误以便更改的信息
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
到
NSError* error = nil;
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];
if (response == nil)
{
NSLog(@"request failed with error %@", error);
// any other error handling
}
接下来的事情。 HTTP消息的默认编码是ISO-8859-1,而不是UTF-8。根据Apple的文档,如果编码错误,-initWithData:将返回nil。您可能想要NSISOLatin1StringEncoding。我说“可能”,因为HTTP有一种机制告诉你它使用了什么字符编码。我认为这是标题内容传输编码,但我建议您使用Google RFC来确定。
最后,如果json_string不是nil,那么它就会泄漏。因为你用alloc获得它,你拥有它意味着你需要在从sendURL返回之前自动释放它:这最后一点不是你问题的原因,它是你代码中的一个单独的bug。