![](/img/trans.png)
[英]Warning about sendsynchronousRequest:returningResponse:error: is deprecated:first seprecated in ios 9-
[英]Switched from sendSynchronousRequest deprecated to NSURLSession ,now app does not launch first activity
以前的代码
[NSURLConnection sendSynchronousRequest:请求返回响应:&响应错误:NULL]; 返回([响应状态代码] == 200)? 是:否;
现在使用的代码
+(BOOL)isConnectNetwork{
NSString *urlString = @"http://www.google.com/";
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"HEAD"];
NSHTTPURLResponse *response;
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:
^(NSData *data, NSURLResponse *response, NSError *error) {
// ...
}];
[task resume];
}
我收到此错误2020-11-06 13:07:36.125607+0000 App[8518:1786305] [NetworkInfo] 信号强度查询返回错误:Error Domain=NSPOSIXErrorDomain Code=13“Permission denied”,描述符:<CTServiceDescriptor 0x2800006 =1, instance=1> 2020-11-06 13:16:03.381478+0000 App[8518:1786223] 无法为时间字符串加载 IOSurface。 而是在本地渲染。
非常不鼓励进行这种网络检查,因为它容易出错。 通常最好假设网络正在工作,直到真正的网络请求(您真正关心的事情)失败,然后适当地处理该失败(错误消息、背景颜色更改等)。
不这样做的原因是在移动设备上,网络可以在一秒钟内工作,而在一秒钟后就无法工作。 因此,像这样进行不必要的网络检查不会带来任何好处,但可能会降低您的应用程序的可用性(特别是如果您在该检查后面设置了任何功能,这同样是非常不鼓励的)。
我的建议是完全删除这个方法,并假装它总是返回 YES。 从长远来看,你会对这种方法更满意。 发生错误时处理错误。 不要试图寻找他们。
也就是说,如果您出于某种原因必须这样做,您将面临的问题是 NSURLSession 任务是异步的,但您正在尝试同步使用它。 因此,要完成这项工作,您需要
但同样,这是非常不鼓励的。 在没有其他方法的地方(涉及我无法控制的 swizzling 代码),我已经这样做了作为一种解决方法,但除非没有其他方法,否则请不要这样做。 :-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.