2010-01-23 18 views
8

मुझे कुछ समस्याएं हैं जहां मेरी पोस्ट अधिसूचना है:NSNotificationCenter समस्याओं को डीबग करने के तरीके?

[[NSNotificationCenter defaultCenter] postNotificationName:@"MobileProviderChanged" 
                object:self.selectedProviderID]; 

मेरे पर्यवेक्षक द्वारा फंस नहीं जा रहा है:

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(onProviderChanged:) 
              name:@"MobileProviderChanged" 
              object:nil]; 

सटीक वही पर्यवेक्षक एक अलग व्यू कंट्रोलर में सही ढंग से काम करता है।

यह देखने के लिए कि कौन से संदेश वास्तव में डिफ़ॉल्ट केंद्र में पोस्ट किए गए हैं, इसे डीबग करने के तरीकों पर कोई सुझाव?

धन्यवाद।

+0

जितना अधिक मैं इस मुद्दे पर शोध करता हूं मुझे आश्चर्य है कि मेरी समस्या यह है कि प्रेषण व्यू कंट्रोलर देखने वाले व्यू कंट्रोलर की तुलना में एक अलग थ्रेड पर है। – CBGrey

+0

अरे ग्रेपॉइंट - अधिसूचना शुरू करने वाले धागे से कोई फर्क नहीं पड़ता। पर्यवेक्षक की विधि को अधिसूचना पर पोस्ट किए गए किसी भी थ्रेड पर बुलाया जाएगा, हालांकि - आपको इसके साथ सावधान रहना चाहिए। यदि आपको अपने ऐप के माध्यम से अधिसूचनाओं का पता लगाने में परेशानी हो रही है तो आपको http://www.sparkinspector.com की जांच करनी चाहिए - जिसमें उनकी निगरानी के लिए एक उपकरण है। –

उत्तर

1

अधिक मैं इस मुद्दे पर शोध मैं आश्चर्य अगर मेरी समस्या यह है कि भेजने ViewController अवलोकन ViewController की तुलना में एक अलग धागे पर है।

गलत बहु-थ्रेडिंग लगभग आपकी समस्या का स्रोत है। हालांकि, अधिसूचनाएं अभी भी भेजी जानी चाहिए और प्राप्त की जानी चाहिए।

विशेष रूप से, जो भी थ्रेड भेजा गया था उस पर एक अधिसूचना प्राप्त की जाएगी। चूंकि आप उल्लेख करते हैं कि आप अधिसूचना के जवाब में व्यू कंट्रोलर के साथ मिल रहे हैं, यह संभावना है कि आप गैर-मुख्य थ्रेड पर कुछ कर रहे हैं कि UIKit नाखुश है।

+0

धन्यवाद बीबीएम। मैं कैसे सुनिश्चित कर सकता हूं कि मेरा प्रेषण दृश्य नियंत्रक और दृश्य नियंत्रक देख रहा है (वे नेविगेशन नियंत्रक के माध्यम से माता-पिता/बच्चे हैं) एक ही थ्रेड पर हैं? या यह भी संभव है कि वे विभिन्न धागे पर हैं? – CBGrey

+0

अधिसूचना हमेशा एक ही थ्रेड पर संभाला जाएगा। यही दिक्कत है। यदि व्यू कंट्रोलर थ्रेड सुरक्षित नहीं हैं, तो उन्हें हमेशा मुख्य थ्रेड पर मैसेज किया जाना चाहिए और इस प्रकार, सभी नोटिफिकेशन * को मुख्य थ्रेड पर पोस्ट किया जाना चाहिए। – bbum

+0

एचएम, दो चीजें मुझे सोचती हैं कि ये वास्तव में एक ही थ्रेड पर हैं ... मैंने अपनी पोस्ट अधिसूचना को उपयोग करने के लिए संशोधित किया: "प्रदर्शन चयनकर्ता ओनमेन थ्रेड" (इसे मुख्य थ्रेड पर मजबूर करना) लेकिन यह अभी भी काम नहीं करता है। दूसरा, मैंने थ्रेड गतिविधि को ट्रैक करने के लिए "इंस्ट्रूमेंट्स" का उपयोग किया और ऐसा लगता है कि दोनों मुख्य धागे पर हैं (यदि मैं समझता हूं कि मैं क्या देखता हूं)। निराशाजनक। NSNotifications का पता लगाने या किसी भी तरह से यह सत्यापित करने का कोई तरीका है कि मेरे addObserver वास्तव में जोड़ा गया है? – CBGrey

1

एक ही समस्या है। समाधान काफी सरल है, लेकिन स्पष्ट नहीं है:

सुनिश्चित करें कि पर्यवेक्षक अभी भी NSNotification वितरण के दौरान मौजूद है।

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