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 上却没有?