2016-03-28 10 views
5

कॉल करने के बाद आईओएस 9.3 फ्रीज आईओएस 9.3 पर openURL पर कॉल करने के बाद मेरा ऐप फ्रीज 13E233 & 13E234 बनाता है।ओपन 9

मैंने dispatch_after का उपयोग करने का प्रयास किया लेकिन यह समस्या को ठीक नहीं करता है।

यहां कोड है, कुछ विशेष नहीं है।

+ (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 बग की तरह लगता है, कई अन्य क्षुधा प्रभावित भी।

+0

क्या आप अपना कोड दिखा सकते हैं? – Fonix

+0

क्या आप पूरे फ़ंक्शन कोड को पोस्ट कर सकते हैं? –

+0

@Fonix कोड जोड़ा गया –

उत्तर

7

आईओएस 9.3 (आईफोन 6 और आईफोन 6 प्लस पर परीक्षण) पर मुख्य धागे पर कॉल होने पर यह वास्तव में एक डेडलॉक का कारण बनता है।

semaphore

पश्व-अनुरेखन:

* 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_async ब्लॉक में पूरे कॉल लपेटकर समस्या का समाधान हो:

dispatch_async(dispatch_get_main_queue(), ^{ 
    if ([[UIApplication sharedApplication] canOpenURL:url]) { 
     [[UIApplication sharedApplication] openURL:url]; 
    } 
}); 

मैं एप्पल के साथ एक रडार फ़ाइल और इसे पोस्ट करेंगे Open Radar पर।

ऐसा लगता है कि यह आईओएस 9.3.1 के साथ तय हुई थी:

ठीक करता है एक मुद्दा है कि वजह से क्षुधा सफारी और अन्य एप्लिकेशन में लिंक पर दोहन के बाद अनुत्तरदायी किया जाना है।

+0

मुझे आईओएस 9.3 के साथ अपने आईफोन 6 पर एक ही त्रुटि मिली। असल में मैं सफारी का उपयोग नहीं कर सकता (मैं लिंक नहीं खोल सकता: एस) और 'openURL' का उपयोग करने वाले सभी एप्लिकेशन क्रैश होने जा रहे हैं। एक उदाहरण: ** स्लैक **। अजीब बात यह है कि मेरे सहयोगी के पास एक ही कॉन्फ़िगरेशन (आईओएस 9.3 के साथ आईफोन 6) है लेकिन त्रुटि –

+0

नहीं होती है असल में मुझे यह त्रुटि कंसोल में प्राप्त हो रही है: ': NanoAppRegistry कार्यक्षेत्र जानकारी प्राप्त करने में त्रुटि: त्रुटि डोमेन = NSCocoaErrorDomain कोड = 4099 "com.apple.nanoappregistry.workspace नाम की सेवा से कनेक्शन को अवैध कर दिया गया था।" UserInfo = {NSDebugDescription = com.apple.nanoappregistry.workspace नाम की सेवा के कनेक्शन को अवैध कर दिया गया था।} ' –

+0

इसे 'आईओएस 9.3.1' रिलीज के साथ हल किया जाना चाहिए –

0

मुझे आईपैड एयर 2/3 चल रहा आईओएस 9.3.5 पर एक ही समस्या का सामना करना पड़ा और जेएएल के जवाब ने मेरे लिए समस्या का समाधान नहीं किया।

नीचे दिया गया कोड आकर्षण की तरह काम करता है।

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) 
     } 
    } 
}