2012-11-26 11 views
5

यदि मैं एक ivar के रूप में reuseidentifier = nil के साथ एक निश्चित UITableViewCell रखता हूं और इस उदाहरण को एक विशिष्ट पंक्ति के लिए वापस कर देता हूं, और फिर इस पंक्ति को विशेष रूप से [tableView reloadRowsAtIndexPaths:withRowAnimation:] का उपयोग करके पुनः लोड करें, पंक्ति सामग्री गायब हो जाती है (या कभी-कभी झिलमिलाहट)। जब मैं दूर और पीछे स्क्रॉल करता हूं, तो यह फिर से दिखाई देता है। अगर मैं दूसरी तरफ [tableView reloadData] करता हूं, तो यह गायब नहीं होगा।मैन्युअल रूप से पुन: उपयोग क्यों किया जाता है UITableViewCell पंक्ति-रीलोड पर गायब हो जाता है?

  • जब मैं पंक्ति को फिर से लोड करता हूं तो यह गायब क्यों होता है?
  • क्यों नहीं, जब मैं पूरी तालिका को फिर से लोड करता हूं?

यहां एक नमूना परियोजना है:, https://github.com/hannesoid/HOTableViewTests

मैं आईओएस 6 मुझे पता है पर यह परीक्षण किया है कि मैन्युअल रूप से (बाहर reuseidentifier & dequeueing के साथ) इस तरह से एक UITableViewCell पुन: उपयोग आम तौर पर अनुशंसित नहीं है लेकिन कुछ स्थिर परिस्थितियों में यह चीजों को सरल बना देगा।

उत्तर

1

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

0

nil के बराबर बनाने के लिए यह एक अच्छा अभ्यास नहीं है। स्ट्रिंग/नाम के साथ हमेशा reuseIdentifier प्रारंभ करें। cellForRowAtIndexPath अपने reuseIdentifiers पर देखकर पंक्तियों को पुनः लोड करता है। यदि कैश किए गए सेल मौजूदा reuseIdentifier के साथ पाए जाते हैं, तो यह उन कोशिकाओं को सीधे आवंटित किए बिना और नए प्रारंभ किए बिना प्रदर्शित करता है। इसे nil बनाना समस्या का कारण बनता है। तो, [email protected]"cell" या अपनी पसंद की कुछ बनाएं। यह आपकी समस्या का समाधान करेगा।

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