【问题标题】:NSURLRequest delegates not getting called on Device Works fine on simulator.NSURLRequest 代表没有在设备上被调用 在模拟器上工作正常。
【发布时间】:2023-03-08 02:21:01
【问题描述】:

当我在设备上运行应用程序时,没有调用 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。你没有这样做。

标签: iphone objective-c ios ios4 nsurlconnection


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

    NSMutableURLRequest 需要有效的 url

    【讨论】:

    • 哦,很抱歉,但网址确实有效。这意味着它不是我在那里写的 URL。不想公开 URL,因为它是一个内部帐户 :( 但它可以工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多