2011-04-16 21 views
18

कुछ परिस्थितियों में, UITableView didSelectRowAtIndexPath को Pushing the same view controller instance more than once is not supported त्रुटि के कारण दो बार बुलाया जा रहा है।UITableView didSelectRowAtIndexPath को दो बार

यहाँ के घटनाओं के अनुक्रम हैं:

TableView::didSelectRowAtIndexPath. 
TableView::viewWillDisappear. 
PushedViewController::viewWillAppear. 
TableView::didSelectRowAtIndexPath. 
Error: Pushing the same view controller instance more than once is not supported' 

ध्यान देने योग्य बात यह है कि केवल UITableView छवियों एसिंक्रोनस रूप से लोड कर रहा है, लेकिन यह कभी नहीं कहता है didSelectRowAtIndexPath। साथ ही, PITViewController को UITableView में सेल चयनित होने पर प्रत्येक बार इसे पुनः लोड करने से बचने के लिए पुन: उपयोग किया जाता है।

किसी को भी यह पता है कि इसका क्या कारण हो सकता है? धन्यवाद।

+0

कुछ प्रासंगिक कोड पोस्ट करें? – Jamie

+0

सुनिश्चित करें कि आप कॉल करें deselectrowatindx पथ का चयन नहीं किया ...... – Ravin

+0

रैविंग, मैं या तो कॉल नहीं कर रहा हूं। जेमी, क्या प्रासंगिक कोड? एक pushViewController है और फिर उपरोक्त होता है (हर समय नहीं)। –

उत्तर

1

पहले "didSelectRow" के बाद उपयोगकर्ता इंटरैक्शन को अक्षम करें। संक्रमण के दौरान "ढेर" करने के लिए कई नल के लिए यह संभव है।

यह आमतौर पर इस व्यवहार को पाने के लिए किसी को अपनी उंगलियों में अद्भुत निपुणता के साथ ले जाता है, लेकिन फिर भी।

+0

[इस व्यवहार को पाने के लिए अपनी उंगलियों में अद्भुत निपुणता वाला कोई व्यक्ति]। तुम सही हो, लेकिन यह हो रहा है। क्या इसका मतलब है कि आपने इसे पहले देखा है? क्या यह आईओएस में एक बग हो सकता है? –

+7

किसी डॉन टेस्टर की तरह अद्भुत निपुणता वाले –

+0

एडम, हाँ, यह सही है। @ईडी। : चाहे यह आईओएस में एक बग है या नहीं, मैं नहीं बता सकता। यदि मैं गलत नहीं हूं तो हाल ही में आईओएस 7 के रूप में जंगली में निश्चित रूप से देखा गया है। –

32

मुझे यह समस्या भी दिखाई दे रही है, शायद 1000 उपयोगकर्ताओं में से एक प्रभावित हो जाता है, या कम। मैं स्पष्ट रूप से देख सकता हूं कि दो किया गया चयन करें IAeexexPath 50 एमएस एक दूसरे के बाद पंजीकरण कर रहा है। मेरा अनुमान है कि यह आईओएस में एक बग है - नए व्यू-कंट्रोलर को धक्का देने के बाद कोई नया टैप पुराने दृश्य को निर्देशित नहीं किया जाना चाहिए। हां, यह हमारे खिलाफ कोड सुरक्षा लिखने की संभावना है। यहाँ मैं क्या सोच रहा हूँ है:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath { 
     if (self.navigationController.topViewController != self)   
      return; 

    ... do other stuff 

    } 
+4

यह फिक्स सरल है और काम करता है। बीटीडब्ल्यू: मेरे ऐप पर मैं इस मुद्दे को किसी भी समय पुन: उत्पन्न करने में सक्षम था। 1. ऐप खोलें। 2. तालिका दृश्य नियंत्रक पर जाएं जो इंटरनेट से जानकारी लोड कर रहा है। 3. लोडिंग के दौरान पागल की तरह किसी भी पंक्ति को टैप करें। 4।कई DidSelect ट्रिगर किए गए हैं और विस्तार ViewController को – AmitP

+1

से अधिक बार धक्का दिया गया है, मुझे यह समस्या हो रही थी, विशेष रूप से didSelectRowAtIndexPath में एक segue निष्पादित करते समय। मैंने यह सुनिश्चित करने के लिए कुछ परीक्षण किया कि यह वैध सेल चयनों को पूर्ववत नहीं करेगा, और देखो और यह एक आकर्षण की तरह काम करता है! – averydev

0

यह तब होता है क्योंकि segue की आप didSelectRowAtIndexPath विधि के अंदर उपयोग कर रहे हैं। यह सुनिश्चित करें कि इस दृश्य को स्रोत दृश्य नियंत्रक के शीर्ष पर दृश्य दृश्य नियंत्रक के दृश्य बटन से ctrl खींचकर बनाया गया है। त्रुटि तब होती है जब आप तालिका दृश्य कक्ष से गंतव्य दृश्य नियंत्रक को ctrl खींचकर cgue बनाते हैं। आपको किसी भी कोड को बदलने की आवश्यकता नहीं है। बस segue हटाएं और इसे सही तरीके से बनाएं। उम्मीद है कि अगर यह सही सवाल है तो यह आपकी समस्या हल करता है।

1

यदि आपने पहले ही स्टोरीबोर्ड सेगू बनाया है तो कॉल न करें;

[self performSegueWithIdentifier:@"TYPE" sender:self];

इस पद्धति में

;

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

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