2011-07-29 18 views
7

मेरे पास एक ऐसा वर्ग है जो आने वाले संदेशों को प्रबंधित करता है और आईपैड में बाहरी एक्सेसरी में जाता है।EAAccessoryDidConnectNotification दो बार क्यों होता है?

- (id) init 
{ 
    self = [super init]; 
    if (!self) return; 

    [[EAAccessoryManager sharedAccessoryManager] registerForLocalNotifications]; //we want to hear about accessories connecting and disconnecting 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(accessoryDidConnect:) 
               name:EAAccessoryDidConnectNotification 
               object:nil]; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(accessoryDidDisconnect:) 
               name:EAAccessoryDidDisconnectNotification 
               object:nil]; 
    ... 
} 

dealloc में मैं

- (void) dealloc 
{ 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:EAAccessoryDidDisconnectNotification object:nil]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:EAAccessoryDidConnectNotification object:nil]; 
    [[EAAccessoryManager sharedAccessoryManager] unregisterForLocalNotifications];  
} 

किसी कारण से, जब मैं accessoryDidConnect आईपैड के लिए बाहरी एक्सेसरी से कनेक्ट: एक accessoryDidDisconnect के बाद आग: पालन किया init में मैं निम्नलिखित कोड है accessoryDidConnect द्वारा:

मुझे पता नहीं लगा कि मुझे अतिरिक्त कनेक्ट और डिस्कनेक्ट क्यों मिलेगा। कोई विचार?

उत्तर

3

इस अनुक्रम में बदलें। प्रबंधक के लिए पहले अधिसूचना रजिस्टर

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(accessoryDidConnect:) 
              name:EAAccessoryDidConnectNotification 
              object:nil]; 


[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(accessoryDidDisconnect:) 
              name:EAAccessoryDidDisconnectNotification 
              object:nil]; 



[[EAAccessoryManager sharedAccessoryManager] registerForLocalNotifications]; //we want to hear about accessories connecting and disconnecting 
+0

अपडेट किया गया और इसे –

+0

पर जांचें ठीक है, चीज़ें अब ठीक से काम कर रही हैं। मुझे केवल एक एक्सेसरीडिड कनेक्ट/एक्सेसरीडिडडिस्कनेक्ट संदेश मिलता है, जो कि अच्छा है। हालांकि, यह आदेश के लिए असंबंधित प्रतीत होता है कि रजिस्टरफोरोकल नोटिफिकेशन कहा जाता है। लेकिन, मैंने जो भी दस्तावेज कभी पाया है, वह आपके द्वारा यहां दिए गए क्रम में रजिस्टर कॉल करता है। ऐसा लगता है कि मैं इसे थोड़ा पीछे कर रहा हूं। मुझे लगता है कि वास्तविक समस्या EAAccessory ऑब्जेक्ट की मेरी संदर्भ गिनती में हो सकती है। कोड के इस क्षेत्र में हाल ही में बहुत से कोड परिवर्तन हुए हैं, लेकिन वे मेरे द्वारा नहीं थे। मैंने उन देवताओं से बात की जिन्होंने उन्हें किया, और ... – Sam

+0

उन्हें यकीन नहीं है कि ये अधिसूचनाएं केवल एक बार क्यों आ रही हैं। एक साइड नोट के रूप में, हमारी संदर्भ गिनती बंद थी क्योंकि हमें एहसास नहीं हुआ था कि थ्रेडिंग ने धागे पर चलने वाले लक्ष्य की संदर्भ संख्या में वृद्धि की है। वैसे भी, मैं इसे उत्तर के रूप में चिह्नित करूंगा, भले ही मैं 100% सुनिश्चित नहीं हूं कि यह अचानक क्यों काम करता है। – Sam

2

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

+0

डिवाइस को बदल रहा है NSNotificationCenter पर्यवेक्षकों और EAAcessoryNotification के लिए पंजीकरण करने में मदद नहीं मिली? जैसा कि मैंने उपरोक्त कहा है, मुझे यकीन नहीं है कि अचानक यह ठीक से काम करना क्यों शुरू कर दिया। मैं दो बार जांच करूंगा कि कनेक्ट एक बार आग लगती है (एक नए ऐप पर काम करना जो एक अलग एक्सेसरी से जुड़ता है)। मुझे याद है कि इस समस्या ने मुझे पहले पागल कर दिया। इस – Sam

+0

+1 सही कोड कोड बदलने से कोई फर्क नहीं पड़ता।मैंने अपने रूटव्यू कंट्रोलर की बजाय ऐप प्रतिनिधि में अधिसूचना स्थापित करने का भी प्रयास किया (सिर्फ इसलिए कि यह कोशिश करने के लिए कुछ था)। तब मैंने ऐप्पल के डेमो की कोशिश की और उसी कनेक्ट/डिस्कनेक्ट/कनेक्ट व्यवहार को मिला। यह मेरे पास कैमरा कनेक्टर नहीं है - मेरे पास मिडी मोबिलिज़र डिवाइस भी है और एक ही परिणाम मिलता है। केवल एक चीज बाकी है (जिसे मैं सोच सकता हूं) यह है कि मेरा आईपैड कनेक्टर चक्कर आ रहा है - या मेरे पास मेरे libusb के साथ कुछ चकमा चल रहा है। मैं किनेक्ट/ओपनएनआई के साथ भी काम कर रहा हूं - और शायद मैंने कुछ व्यवस्थित तरीके से खराब कर दिया। – Sam

+0

के बारे में चर्चा में भाग लेने के लिए –

5

eacaccessory ढांचा हमेशा किसी कारण से 2 कनेक्ट और 2 डिस्कनेक्ट नोटिफिकेशन आग लग जाएगा। पहली कनेक्ट डिस्कनेक्ट जोड़ी में कोई प्रोटोकॉल स्ट्रिंग नहीं होगी, आप इन्हें अनदेखा कर सकते हैं।

0

जवाब EAAccessoryDidConnectNotification

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

यह निश्चित रूप से हर समय होने वाला नहीं है, लेकिन यदि आपको यह कनेक्टेड/डिस्कनेक्ट/कनेक्टेड अनुक्रम प्राप्त होता है, तो प्रोटोकॉल तारों की जांच करें। यह शायद प्रमाणीकरण विफलता से संबंधित है।

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