使用NSURLConnection检索数据

时间:2014-05-19 06:55:28

标签: ios objective-c

我有这个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将其显示在屏幕上,我所需要的只是一个很好的例子,让我朝着正确的方向前进。

2 个答案:

答案 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);
}];