2015-09-26 2 views
14

के साथ लॉन्च करना मैं अपने आईओएस 9 ऐप के लिए कुछ 3 डी टच त्वरित क्रियाएं लागू कर रहा हूं, और मेरे पास एक उत्सुक मुद्दा है। जब मेरा ऐप पृष्ठभूमि में होता है और मैं त्वरित कार्रवाई के साथ लॉन्च करता हूं, तो सबकुछ योजनाबद्ध होता है। जब मेरा ऐप पूरी तरह से मर जाता है (यानी मैंने इसे मल्टीटास्किंग मेनू से मार दिया), और मैं त्वरित कार्रवाई के साथ लॉन्च करता हूं, ऐप क्रैश हो जाता है। एक बार जब मैं ऐप को मारता हूं, तो मुझे इसे डिबग करने में परेशानी हो रही है, एक्सकोड में डीबग सत्र अलग हो जाता है। क्या सामान्य रूप से डीबग करने के लिए ऐप से कनेक्ट करने का कोई तरीका है, या मेरे कोड में कुछ ऐसा है जो इसका कारण बनता है? अग्रिम में धन्यवाद।UIAplplicationShortcutItem

कोड:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
{ 
    var launchedFromShortCut = false 

    //Check for ShortCutItem 
    if let shortcutItem = launchOptions?[UIApplicationLaunchOptionsShortcutItemKey] as? UIApplicationShortcutItem 
    { 
     launchedFromShortCut = true 
     self.handleShortCutItem(shortcutItem) 
    } 

    return !launchedFromShortCut 
} 

func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) 
{ 
    self.handleShortCutItem(shortcutItem) 
} 

func handleShortCutItem(shortcutItem: UIApplicationShortcutItem) 
{ 
    //Get type string from shortcutItem 
    if let shortcutType = ShortcutType.init(rawValue: shortcutItem.type) 
    { 
     //Get root navigation viewcontroller and its first controller 
     let rootNavigationViewController = window!.rootViewController as? UINavigationController 


     if let rootViewController = rootNavigationViewController?.viewControllers.first as! LaunchViewController? 
     { 
      //Pop to root view controller so that approperiete segue can be performed 
      rootNavigationViewController?.popToRootViewControllerAnimated(false) 

      switch shortcutType 
      { 
       case .Compose: 
        rootViewController.shouldCompose() 
        break 
      } 
     } 
    } 
} 

धन्यवाद!

+0

आप अभी भी ऐप की क्रैश लॉग फ़ाइल को मारने के बाद देख सकते हैं ... –

+0

आपको यह हल हो गया है, मुझे एक ही समस्या है? – theiOSDude

+0

@theiOSDude नहीं मैंने नहीं किया है। –

उत्तर

15

मैं अंत में यह काम कर गया। यहां बताया गया है कि मेरी AppDelegate.swift फ़ाइल समाप्त हो गई है;

class AppDelegate: UIResponder, UIApplicationDelegate { 

// Properties 
var window: UIWindow? 
var launchedShortcutItem: UIApplicationShortcutItem? 

func applicationDidBecomeActive(application: UIApplication) { 

    guard let shortcut = launchedShortcutItem else { return } 

    handleShortcut(shortcut) 

    launchedShortcutItem = nil 

} 

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

    // Override point for customization after application launch. 
    var shouldPerformAdditionalDelegateHandling = true 

    // If a shortcut was launched, display its information and take the appropriate action 
    if let shortcutItem = launchOptions?[UIApplicationLaunchOptionsShortcutItemKey] as? UIApplicationShortcutItem { 

     launchedShortcutItem = shortcutItem 

     // This will block "performActionForShortcutItem:completionHandler" from being called. 
     shouldPerformAdditionalDelegateHandling = false 

    } 

    return shouldPerformAdditionalDelegateHandling 
} 


func handleShortcut(shortcutItem:UIApplicationShortcutItem) -> Bool { 

    // Construct an alert using the details of the shortcut used to open the application. 
    let alertController = UIAlertController(title: "Shortcut Handled", message: "\"\(shortcutItem.localizedTitle)\"", preferredStyle: .Alert) 
    let okAction = UIAlertAction(title: "OK", style: .Default, handler: nil) 
    alertController.addAction(okAction) 

    // Display an alert indicating the shortcut selected from the home screen. 
    window!.rootViewController?.presentViewController(alertController, animated: true, completion: nil) 

    return handled 

} 

func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) { 

    completionHandler(handleShortcut(shortcutItem)) 

} 

इस के बहुत एप्पल के sample code UIApplicationShortcuts के लिए से लिया गया है, और साबित होता है कि यह पहचानना है उचित शॉर्टकट चुना गया था, इस पॉप करने के लिए अपने कोड के लिए अनुकूलित किया जा सकता है एक चेतावनी का शुभारंभ करते हुए मैं अपने ऐप आ रही हैं दृश्य नियंत्रक।

मुझे लगता है कि func applicationDidBecomeActive महत्वपूर्ण हिस्सा है कि मैं याद आ रही थी, और didFinishLaunchingWithOptions से self.handleShortCut(shortcutItem) को हटाने था (अन्यथा यह handleShortCut बुला रहा था दो बार, ऐसा लग रहा था)।

+0

यह शानदार परीक्षण जल्द ही होगा। –

+0

वह "प्रबंधित" मान क्या है जो आप वापस करते हैं? –

37
  1. Xcode में, खुली उत्पाद -> योजनाएं -> संपादित करें योजनाएं
  2. अपने भागो स्कीम में, यदि आप बारी लॉन्च 'निष्पादन के लिए प्रतीक्षा करें शुरू होने की' सेटिंग

अब बदलने के लिए, डिबगिंग और अपने ऐप को चलाने पर, एक्सकोड आपके ऐप को होम स्क्रीन से लॉन्च करने का इंतजार करेगा ताकि आप 3 डी टच शॉर्टकट आइटम का उपयोग करके इसे लॉन्च करने में सक्षम हो सकें।

See Screenshot in Xcode of the Setting

+1

आपको बहुत बहुत धन्यवाद! इसने मुझे एक समाप्त राज्य से त्वरित कार्रवाई का परीक्षण करने की अनुमति दी। +1 –

+1

यह कंसोल में लॉग प्रिंट नहीं करता है? – genaks

+2

मैं कंसोल पर चीजों को प्रिंट करने के लिए कैसे प्राप्त करूं? – iOShepherd

2

मैं सब से ऊपर की कोशिश की, और यह समस्या का समाधान नहीं की तुलना में मैं handleShortcut विधि में विलंब के बाद शॉर्टकट से निपटने की कोशिश की:

self.performSelector("action1", withObject: self, afterDelay: 0.5) 

और हर कार्रवाई के लिए एक विधि जोड़ा, और यह की तरह काम किया एक आकर्षण

0

इस के साथ अपनी didfinishlaunching विधि को बदलें।

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool { 

    if let shortcutItem = 
     launchOptions?[UIApplicationLaunchOptionsShortcutItemKey] 
     as? UIApplicationShortcutItem { 

    handleShortcut(shortcutItem) 
    return false 
    } 
    return true 
} 
संबंधित मुद्दे