7

के कारण विजेट द्वारा भेजे गए अधिसूचनाओं को खोने से बचें मेरे पास एक विजेट है जो ऐप में एक विशिष्ट क्रिया को सक्रिय करने के लिए NSURL और एक्सटेंशनContext के माध्यम से अपना संबंधित ऐप कहता है।किसी स्पैम स्क्रीन या गलत नियंत्रक सक्रिय

AppDelegate के application:openURL:options: विधि में मेरे पास है:

func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool { 
    if let path = url.path{ 
     if path.containsString("action"){ 
      NSNotificationCenter.defaultCenter().postNotificationName(MyViewController.purchasmyActionKey, object: nil) 
     } 
    } 
    return true 
} 

एप्लिकेशन खुला है, और MyViewController सक्रिय है, कार्रवाई पूरी तरह से मार डाला जाता है। लेकिन, अगर मैं ऐप में एक और दृश्य नियंत्रक पर हूं या ऐप बंद है, तो कार्रवाई निष्पादित नहीं की जाती है।

क्या कोई मुझे सही रास्ते पर सेट कर सकता है?

एनबी: मेरा मुख्य नियंत्रक विभिन्न बाल दृश्य नियंत्रकों के साथ UITabBarController है। कुछ UINavigationControllers (जिसमें ग्रिड नियंत्रक होते हैं) और दूसरा एक ListViewController है।

उत्तर

2

सबसे आसान विकल्प आपके व्यू कंट्रोलर को दिखाना है जो इसे टैब नियंत्रक पर एक मोडल के रूप में संभालता है। यह आमतौर पर कम से कम जटिल और सबसे साफ होता है क्योंकि उपयोगकर्ता को जब यह पूरा किया जाता है तो इस बातचीत से पहले वे आसानी से लौट सकते हैं।

आप ऐसा नहीं कर सकते तो किसी कारण से:

आप कुछ वर्ग सुनिश्चित करना है कि सही दृश्य नियंत्रक दिखाया गया है और जब अधिसूचना में देखा जाता है कार्रवाई करने के लिए अनुरोध बताया जाता है की जिम्मेदारी को नामित करने की जरूरत है। यह सीधे ऐप प्रतिनिधि हो सकता है, टैब बार नियंत्रक या कुछ अन्य विशिष्ट वर्ग जो आप बनाते हैं और टैब नियंत्रक के संदर्भ प्रदान करते हैं।

यह काम टैब नियंत्रक की स्थिति की जांच करना और यदि आवश्यक हो तो सही दृश्य नियंत्रक दिखाएं, तो उस कंट्रोलर को कुछ क्रियाएं शुरू करने के लिए बताएं।

यह वर्ग जो इस तर्क का मालिक है वह आपकी सूचना को देख सकता है, या आप सीधे संदेश भेज सकते हैं क्योंकि आपका ऐप प्रतिनिधि शायद उदाहरण को जान लेगा या एक नया उदाहरण बनायेगा।

संबंधित मुद्दे