NSURLConnection sendSynchronousRequest - 背景到前景

Jit*_*shW 6 iphone nsurlconnection ios4 ios

我使用sendSynchronousRequest从服务器获取数据.我知道同步会等到收到该请求的数据.

但问题是当用户错误地输入一些不存在的url而不是试图获得响应时.在这种情况下,如果用户进入后台并进入前台,则仅显示黑屏.它只显示状态栏.它也没有显示任何背景应用.我必须按Home键才能退出我的应用程序.

在模拟器上,1分钟后,它向我显示"请求超时"的消息(没有崩溃).

在设备上,1分钟内应用程序崩溃.

任何建议.任何帮助.这在我的应用中确实是一个严重的问题.

谢谢.

fbe*_*rdo 14

就像朱利安所说,看门狗正在杀死你的应用程序.回答一些问题:

  • 为什么这只发生在模拟器上?因为当您调试看门狗时,单独留下您的应用程序,可能需要一些时间.
  • 为什么只有当用户输入错误的网址时才会发生这种情况?由于系统超时,如果找不到服务器,系统将继续尝试60秒.
  • 所以问题是同步还是异步?不,问题是线程,你可以在后台线程中执行相同的操作,只是不要在主线程上执行它,看门狗会让你独自一人.
  • 当应用程序出现时,为什么屏幕变黑?记住,你正在主线程上创建阻塞内容,这个线程是...

希望就是这样.如果我错过了什么,请告诉我.


sup*_*ndr 8

为什么不为连接设置超时?

NSString *urlString = TEST_CONNECTION;
NSError *error = nil;
NSHTTPURLResponse *response = nil;
NSURLRequest *request = [NSURLRequest
                         requestWithURL:[NSURL URLWithString:urlString]
                         cachePolicy:NSURLRequestReloadIgnoringCacheData
                         timeoutInterval:5.0];


NSData *conn = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
Run Code Online (Sandbox Code Playgroud)

这应该会在几秒钟之后释放同步等待,这应该可以解决您的问题,而无需进行异步调用(有时这不是正确的解决方案)

我知道这是正常的,因为这是我检查我是否连接到某个VPN(可达性标志完全失败)的方式.