2015-01-14 1 views
2

Возможный дубликат: Crash when open containing app from today extension.Приключение приложения iOS при открытии с сегодняшнего дня.

Я пытаюсь открыть содержащее приложение из виджета сегодняшнего расширения, используя настраиваемую схему URL. Код, я использую внутри расширения является:

let urlStr = String(format: "myapp://?device_id=%@", deviceId!) 
let url = NSURL(string: urlStr) 
self.extensionContext!.openURL(url!, completionHandler: nil) 

Однако, содержащий сбой приложения при открытии:

Thread : Crashed: com.apple.main-thread 
0 CoreFoundation     0x0000000103e572dc CFStringCreateCopy + 28 
1 libswiftFoundation.dylib  0x0000000105f02a44 _TF10Foundation24_convertNSStringToStringFCSo8NSStringSS + 148 
2 MyApp       0x00000001017a9055 @objc MyApp.CLAppDelegate.application (MyApp.CLAppDelegate)(ObjectiveC.UIApplication, openURL : ObjectiveC.NSURL, sourceApplication : Swift.String, annotation : Swift.Optional<Swift.AnyObject>) -> Swift.Bool (CLAppDelegate.swift) 
3 UIKit       0x0000000104898685 -[UIApplication _applicationOpenURL:payload:] + 185 
4 UIKit       0x00000001048a0816 -[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:] + 2380 
5 UIKit       0x00000001048a42e8 __88-[UIApplication _handleApplicationLifecycleEventWithScene:transitionContext:completion:]_block_invoke + 196 
6 UIKit       0x00000001048a4215 -[UIApplication _handleApplicationLifecycleEventWithScene:transitionContext:completion:] + 349 
7 UIKit       0x000000010488f31a -[UIApplication scene:didUpdateWithDiff:transitionContext:completion:] + 486 
8 FrontBoardServices    0x000000010903a2a3 __31-[FBSSerialQueue performAsync:]_block_invoke + 16 
9 CoreFoundation     0x0000000103eb553c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12 
10 CoreFoundation     0x0000000103eab285 __CFRunLoopDoBlocks + 341 
11 CoreFoundation     0x0000000103eaaa43 __CFRunLoopRun + 851 
12 CoreFoundation     0x0000000103eaa486 CFRunLoopRunSpecific + 470 
13 GraphicsServices    0x0000000106e6e9f0 GSEventRunModal + 161 
14 UIKit       0x0000000104891420 UIApplicationMain + 1282 
15 MyApp      0x00000001017ac57e top_level_code (CLAppDelegate.swift:16) 
16 MyApp      0x00000001017ac5ba main (CLAppDelegate.swift) 
17 libdyld.dylib     0x0000000106155145 start + 1 

же обычай схема URL работает при открытии из любых других.

Использование Xcode 6.1.1, цель развертывания 8.1.

ответ

4

Удалось решить это сам и подумал, что опубликую решение.

Оказывается, заявление UIApplicationDelegate в качестве автоматического завершения одной из предыдущих версий Xcode был неправилен:

func application(application: UIApplication, 
       openURL url: NSURL, 
       sourceApplication: String!, // Wrong 
       annotation: AnyObject?) -> Bool 

должны быть действительно:

func application(application: UIApplication, 
       openURL url: NSURL, 
       sourceApplication: String?, // OK 
       annotation: AnyObject?) -> Bool 

(sourceApplication потребности быть String? и НЕ String!)

Надеюсь, это поможет кому-то.