NSURLRequest 代表没有在设备上被调用 在模拟器上工作正常。

Posted

技术标签:

【中文标题】NSURLRequest 代表没有在设备上被调用 在模拟器上工作正常。【英文标题】:NSURLRequest delegates not getting called on Device Works fine on simulator. 【发布时间】:2012-09-12 10:34:04 【问题描述】:

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

我的代码请求网址在这里。非常感谢任何帮助。

- (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);

【问题讨论】:

旁注 - 阅读文档,如果你重写 viewWillAppear: 方法,你必须在你的实现中调用 super。你没有这样做。 【参考方案1】:

您在此处提供的代码毫无意义:

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

该行返回一个指向 NSURLConnection 对象的指针,您的变量名具有误导性。如果您想在此时阻止(并且这样做甚至有效),那么您似乎需要在此时使用 sendSynchronousRequest。

我做的事情与你想做的事情相似,但以更传统的方式。在 viewDidLoad 甚至 initWithFrame 中,我会启动一个异步连接,设置一个标志,并将视图背景颜色设置为黑色或白色(我也通常使用微调器)。当我得到 viewWillAppear 时,如果连接完成,一切都很好,我设置了各种 UI 元素。如果没有,则不执行任何操作,稍后,当连接完成时,拉下微调器并更新 UI。

我能想到的在您尝试阻止主线程的唯一方法是使用该同步请求(恕我直言,这是一种非常糟糕的处理方式)。

在后台执行操作的好处在于,如果花费的时间过长,用户可以点击返回按钮或转到应用程序中的其他位置 [在这种情况下,您取消连接并关闭所有内容。]

【讨论】:

【参考方案2】:

检查你在浏览器中检查时提供给 NSMutableURLRequest 的 url 什么都没有

NSMutableURLRequest 需要有效的 url

【讨论】:

哦,很抱歉,但网址确实有效。这意味着它不是我在那里写的 URL。不想公开 URL,因为它是一个内部帐户 :( 但它可以工作

以上是关于NSURLRequest 代表没有在设备上被调用 在模拟器上工作正常。的主要内容,如果未能解决你的问题,请参考以下文章

viewForHeaderInSection 没有在 reloadData 上被调用

viewWillAppear 没有在 UIPageViewController 孩子上被调用

Flutter Geolocator 显示方法 toDouble() 在 null 上被调用

为啥我的方法在 iPhone/iPod 上被调用了两次,但在 iPad 上却没有?

iphone:在 NSURLRequest 期间未调用 applicationWillTerminate?

商店的变更监听器没有在 componentWillUnmount 上被删除?