Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS 9.3调用openURL后冻结_Ios_Objective C_Openurl_Ios9.3 - Fatal编程技术网

iOS 9.3调用openURL后冻结

iOS 9.3调用openURL后冻结,ios,objective-c,openurl,ios9.3,Ios,Objective C,Openurl,Ios9.3,在iOS 9.3版本13E233和13E234上调用openURL后,我的应用程序冻结 我尝试在之后使用dispatch\u,但这并不能解决问题 这是密码,没什么特别的 + (void)someMethod:(UIView *)senderView { [Utility showLoadingHUDWithText:nil inView:senderView]; [[SomeClient sharedClient] someNetworkAPI:^(id result) {

在iOS 9.3版本13E233和13E234上调用
openURL
后,我的应用程序冻结

我尝试在之后使用
dispatch\u,但这并不能解决问题

这是密码,没什么特别的

+ (void)someMethod:(UIView *)senderView {

    [Utility showLoadingHUDWithText:nil inView:senderView];

    [[SomeClient sharedClient] someNetworkAPI:^(id result) {
        [Utility hideAllHUDsForView:senderView];

        NSDictionary *dict = (NSDictionary *)result;
        NSString *someString = dict[@"someKey"];
        NSURL *url = [NSURL URLWithString:someString];
        if ([[UIApplication sharedApplication] canOpenURL:url]) {
            [[UIApplication sharedApplication] openURL:url];
        }
    } fail:^(NSError *error) {
        [Utility hideAllHUDsForView:senderView];
        [Utility showMessageHUD:error.localizedDescription];
    }];
}

这似乎是一个iOS错误,许多其他应用程序也受到影响。

这确实会导致在iOS 9.3(在iPhone 6和iPhone 6 Plus上测试)上调用主线程时出现死锁

回溯:

* thread #1: tid = 0x41840, 0x0000000180ac1014 libsystem_kernel.dylib`semaphore_wait_trap + 8, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
  * frame #0: 0x0000000180ac1014 libsystem_kernel.dylib`semaphore_wait_trap + 8
    frame #1: 0x000000010023fa20 libdispatch.dylib`_dispatch_semaphore_wait_slow + 244
    frame #2: 0x0000000180bda934 libxpc.dylib`xpc_connection_send_message_with_reply_sync + 204
    frame #3: 0x000000018276a238 MobileCoreServices`_LSStartOpenOperation + 232
    frame #4: 0x0000000182791efc MobileCoreServices`-[LSOpenOperation main] + 1160
    frame #5: 0x0000000182771bc0 MobileCoreServices`-[LSApplicationWorkspace openURL:withOptions:error:] + 472
    frame #6: 0x000000018633cdd8 UIKit`-[UIApplication _openURL:] + 356
    frame #7: 0x0000000100096c04 MyApp`__29-[ViewController someMethod]_block_invoke(.block_descriptor=0x0000000125d37e20) + 216 at ViewController.m:57
    frame #8: 0x000000010022da7c libdispatch.dylib`_dispatch_call_block_and_release + 24
    frame #9: 0x000000010022da3c libdispatch.dylib`_dispatch_client_callout + 16
    frame #10: 0x00000001002334e4 libdispatch.dylib`_dispatch_main_queue_callback_4CF + 2096
    frame #11: 0x0000000180ef8dd8 CoreFoundation`__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12
    frame #12: 0x0000000180ef6c40 CoreFoundation`__CFRunLoopRun + 1628
    frame #13: 0x0000000180e20d10 CoreFoundation`CFRunLoopRunSpecific + 384
    frame #14: 0x0000000182708088 GraphicsServices`GSEventRunModal + 180
    frame #15: 0x00000001860f5f70 UIKit`UIApplicationMain + 204
    frame #16: 0x00000001000970d0 MyApp`main(argc=1, argv=0x000000016fd6fae8) + 124 at main.m:14
    frame #17: 0x00000001809be8b8 libdyld.dylib`start + 4
我发现将整个调用包装在
dispatch\u async
块中解决了这个问题:

dispatch_async(dispatch_get_main_queue(), ^{
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        [[UIApplication sharedApplication] openURL:url];
    }
});
我会向苹果公司提交一份雷达文件,并将其发布在网站上

看起来这是iOS 9.3.1修复的:

修复了在点击Safari和其他应用程序中的链接后导致应用程序无响应的问题


我在运行iOS 9.3.5的iPad Air 2/3上也遇到了同样的问题,而日航的回答并没有为我解决这个问题

下面的代码很有魅力

fileprivate func letApplicationHandleUrl(_ url: URL) {

    guard UIApplication.shared.canOpenURL(url) else {

        return
    }

    if #available(iOS 10.0, *) {

        UIApplication.shared.open(url, options: [:], completionHandler: nil)

    } else {

        DispatchQueue.global(qos: .userInteractive).async {

            UIApplication.shared.openURL(url)
        }
    }
}

你能展示你的代码吗?你能发布整个函数代码吗?我打赌这与我有一个非常相似的代码相同的问题有关。在我的所有设备上都可以正常工作,但在一些随机客户上会冻结@nix wang HUD继续在屏幕上显示,而不是关闭?因为这是客户报告的…@sabadow。但我在其他没有HUD的应用程序上发现了这个问题。我在iOS 9.3的iPhone6上发现了同样的错误。实际上,我不能使用Safari(我不能打开links:S),所有使用
openURL
的应用程序都将崩溃。例如:松弛。奇怪的是,我的同事有相同的配置(iPhone6和iOS9.3),但错误没有发生。我在控制台中收到这个错误:
:获取NanoAppRegistry工作区信息时出错:error Domain=nscocaerorRorDomain code=4099“与名为com.apple.NanoAppRegistry.workspace的服务的连接无效。”UserInfo={NSDebugDescription=与名为com.apple.nanoappregistry.workspace的服务的连接无效。}