2015-09-28 12 views
8

पर "त्वरित क्रियाएं" जोड़ें, मैं अपने ऐप में आईओएस 9 के त्वरित कार्यों को जोड़ना चाहता हूं।मेरे आईओएस 9 ऐप

मैं अपने ऐप प्रतिनिधि में इस कोड डाल:

import UIKit 
enum ShortcutType: String { 
    case NewScan = "QuickAction.NewScan" 
    case Settings = "QuickAction.Settings" 
} 
@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow? 
    static let applicationShortcutUserInfoIconKey = "applicationShortcutUserInfoIconKey" 

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

     UIViewController.prepareInterstitialAds() 

     if(UIApplication.instancesRespondToSelector(Selector("registerUserNotificationSettings:"))) { 
      UIApplication.sharedApplication().registerUserNotificationSettings(UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)) 
     } 

     // QUICK ACTIONS 
      var launchedFromShortCut = false 

      if #available(iOS 9.0, *) { 
       if let shortcutItem = launchOptions?[UIApplicationLaunchOptionsShortcutItemKey] as? UIApplicationShortcutItem { 
        launchedFromShortCut = true 
        handleShortCutItem(shortcutItem) 
       } 
      } else { 
       return true 
      } 
      return !launchedFromShortCut 

    } 

    /**************** QUICK ACTIONS ****************/ 
    @available(iOS 9.0, *) 
    func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: Bool -> Void) { 
      let handledShortCutItem = handleShortCutItem(shortcutItem) 
      completionHandler(handledShortCutItem) 
    } 
    @available(iOS 9.0, *) 
    func handleShortCutItem(shortcutItem: UIApplicationShortcutItem) -> Bool { 
     var handled = false 
     if let shortcutType = ShortcutType.init(rawValue: shortcutItem.type) { 
      let rootNavigationViewController = window!.rootViewController as? UINavigationController 
      let rootViewController = rootNavigationViewController?.viewControllers.first as UIViewController? 
      rootNavigationViewController?.popToRootViewControllerAnimated(false) 
      switch shortcutType { 
       case .NewScan: 

        rootViewController?.performSegueWithIdentifier("goToCamera", sender: nil) 
        handled = true 

       case.Settings: 
        rootViewController?.performSegueWithIdentifier("goToSettings", sender: nil) 
        handled = true 
      } 
     } 
     return handled 
    } 
} 

अब मैं> त्वरित कार्रवाई दिखाया जाएगा> मैं त्वरित कार्रवाई "नई स्कैन" का चयन मेरी एप्लिकेशन आइकन पर एक शक्ति के स्पर्श कर सकते हैं> एप्लिकेशन खुलेगा और मुझे अंतिम दृश्य दिखाएगा, जिसे मैंने छोड़ा है।

लेकिन सीगू निष्पादित नहीं किया जाएगा।

enter image description here

स्पष्टीकरण::

एक: नेविगेशन नियंत्रक और initiale नियंत्रक

बी: ViewController, एक जांच के बाद यह एक segue कर देगा

यहाँ मेरी स्टोरीबोर्ड का एक हिस्सा है नेविगेशन नियंत्रक सी

सी: नेविगेशन नियंत्रक

डी: तालिका दृश्य नियंत्रक

ई: ViewController

अगर मैं त्वरित कार्रवाई के साथ नई स्कैन का चयन करें - मैं ViewController ई दिखाने के लिए

उत्तर

5

ऐसा लगता है कि आप चीजों को सही ढंग से आधारित कर रहे हैं चाहते हैं example code in the documentation पर। हालांकि, आपको अपने handleShortCutItem: कार्यान्वयन में बहुत अधिक वैकल्पिक श्रृंखला मिल गई है। क्या आपने डीबगर का उपयोग यह सत्यापित करने के लिए किया है कि इनमें से किसी भी अभिव्यक्ति में शून्य मान हैं? इसके अलावा, जो मैं देख सकता हूं (हालांकि छवि धुंधली है), उस स्टोरीबोर्ड में पहले एनवी नियंत्रक के रूट व्यू कंट्रोलर को ई के लिए एक सीगू नहीं है। इसलिए मुझे यकीन नहीं है कि आप वहां कैसे पहुंचना चाहते हैं।

मैं सुझाव दूंगा कि आप अपने handleShortCutItem: कार्यान्वयन में ब्रेकपॉइंट सेट करें ताकि पहले यह सत्यापित किया जा सके कि आप जिन मूल्यों के साथ काम कर रहे हैं वे nil नहीं हैं और कोड वास्तव में निष्पादित है। एक बार ऐसा करने के बाद, आप अपने स्टोरीबोर्ड का उपयोग अपने इच्छित दृश्य नियंत्रण को तुरंत चालू करने के लिए कर सकते हैं और बस उनमें से एक सरणी बना सकते हैं क्योंकि आप अपने व्यू कंट्रोलर पदानुक्रम को अपने नेविगेशन नियंत्रक में रखना चाहते हैं और इस सरणी में नेविगेशन नियंत्रक की viewControllers संपत्ति सेट करें।

func handleShortCutItem(shortcutItem: UIApplicationShortcutItem) -> Bool { 
    guard let shortcutType = ShortcutType.init(rawValue: shortcutItem.type) else { 
     return false 
    } 

    guard let rootNavigationController = window?.rootViewController as? UINavigationController else { 
     return false 
    } 

    guard let rootViewController = rootNavigationController?.viewControllers.first else { 
     return false 
    } 

    guard let storyboard = rootNavigationController.storyboard else { 
     return false 
    } 

    var viewControllers = [rootViewController] 
    switch shortcutType { 
    case .NewScan: 
     // Instantiate the necessary view controllers for this case 
     viewControllers += [storyboard.instantiateViewControllerWithIdentifier("<#Identifier for some view controller#>")] 
     ... 
     viewControllers += [storyboard.instantiateViewControllerWithIdentifier("<#Identifier for some other view controller#>")] 

    case.Settings: 
     // Instantiate the necessary view controllers for this case 
     viewControllers += [storyboard.instantiateViewControllerWithIdentifier("<#Identifier for some view controller#>")] 
     ... 
     viewControllers += [storyboard.instantiateViewControllerWithIdentifier("<#Identifier for some other view controller#>")] 
    } 

    // Set the new view controllers array 
    rootNavigationController.setViewControllers(viewControllers, animated: false) 

    return true 
} 

नोट: फिर, यह अपनी छवि से बिल्कुल बताने के लिए आप क्या चाहते हैं कुछ इस तरह कठिन है, लेकिन शायद आप Swift2 के साथ इस सवाल में चिह्नित के बाद से, मैं गार्ड उपयोग करने के लिए कोड को एडजस्ट करने की स्वतंत्रता लिया है बयान।