我有这个api(http://www.timeapi.org/utc/now),它只是将时间作为一个字符串,我想使用NSURLConnection来检索它,除了我对NSURLConnection如何工作感到困惑。
当前代码:
+(NSString *) fetchTime
{
NSString *timeString=@"not_set";
//Code for URL request here
NSURL *timeURL = [NSURL URLWithString:@"http://www.timeapi.org/utc/now"]
return timeString;
}
从视图控制器调用该方法,然后根据MVC将其显示在屏幕上,我所需要的只是一个很好的例子,让我朝着正确的方向前进。
答案 0 :(得分:0)
为了向该api发出请求,您需要这样的内容:
NSURL *timeURL = [NSURL URLWithString:@"http://www.timeapi.org/utc/now"]
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url
cachePolicy:NSURLRequestReloadIgnoringCacheData
timeoutInterval:120];
NSData *urlData;
NSURLResponse *response;
NSError *error;
urlData = [NSURLConnection sendSynchronousRequest:urlRequest
returningResponse:&response
error:&error];
NSString *string = [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];
答案 1 :(得分:0)
您要做的是向服务器发送异步请求以获取时间。如果您发出同步请求,它将阻止您的UI,并且由于某种原因,如果服务器花了一分钟发送响应,用户将无法做任何事情一分钟。使用标准API的示例:
请注意,如果您正在使用同步请求,则可以预期返回值,但在异步调用中,您需要块的帮助才能返回值。所以
-(void) fetchTimeFromServerWithCompletionHandler:(void(^)(id)) onComplete {
NSURLRequest *timeRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.timeapi.org/utc/now"]];
[NSURLConnection sendAsynchronousRequest:timeRequest queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *urlResponse, NSData *data, NSError *error) {
// Do something usefull with Data.
// If expected object is a String, alloc init a String with received Data
NSString *time = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
onComplete(time); // This will return back the time string.
}];
}
如果您在应用中使用了很多服务API,也可以查看AFNetworking。
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:@"http://example.com/resources.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];