我在设备上运行应用程序时未调用NSURLRequest委托方法。它在模拟器上完美运行。同样,在请求完成之前加载视图的情况也不是这样,因为只有在连接接收到数据后,我才允许加载视图。

我的代码请求url在这里。任何帮助,不胜感激。

- (void)viewWillAppear:(BOOL)animated
{
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://-dev01x/content"]; cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:60];
    [request setHTTPMethod:@"GET"];
    _getData = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    NSLog(@"HELLO %@",_getData);
}

最佳答案

您在此处提供的代码没有任何意义:

_getData = [[NSURLConnection alloc] initWithRequest:request delegate:self];


该行返回一个指向NSURLConnection对象的指针,您的变量名具有误导性。如果您要在这一点上进行阻止(甚至可以正常工作),那么您似乎需要在该点上使用sendSynchronousRequest。

我所做的事情与您想做的事情类似,但是采用了更为传统的方式。在viewDidLoad甚至initWithFrame中,我将启动一个异步连接,设置一个标志,并将viewbackgroundColor设置为黑色或白色(我也通常使用微调器)。当我获得viewWillAppear时,如果连接已完成,则一切顺利,并设置了各种UI元素。如果不是,则什么也不做,以后,当连接完成时,拉动微调器并更新UI。

我可以想到的唯一方法就是在该点阻塞主线程(即IMHO是处理此问题的一种非常糟糕的方法)。

在后台执行操作的好处是,如果操作花费的时间太长,则用户可以点击“后退”按钮或进入应用程序中的其他位置(在这种情况下,您将取消连接并断开所有连接。)

09-20 17:04