यहां मेरी ऑब्जेक्ट पदानुक्रम है: NSWindowController
एक NSViewController
, जो कि डेटा स्रोत
& amp; प्रतिनिधि
मेरे NSTableView
के लिए।
NSWindowController
इंटरनेट से कुछ डेटा प्राप्त करता है, और इसे NSViewController
ताकि यह NSTableView
को पॉप्युलेट कर सके। यह एसिंक्रोनस होता है, इसलिए NSTableView
को शुरू में 0 पंक्तियों से लोड किया जाता है।
NSViewController
का मालिक NSTableView
, साथ ही साथ एक NSArray
( डेटा स्रोत
के रूप में)। इन दोनों गुण निजी हैं
यहां से मुझे अपने कार्यान्वयन में विश्वास नहीं है: एक बार जब NSWindowController
ने डेटा प्राप्त कर लिया है, मैं NSViewController
जिसे मैंने नाम दिया है -addStringToArray: (NSString *)
(ऐरे को सार्वजनिक करने से बचने के लिए और फिर सीधे -addObject
को NSArray पर कॉल करना)
)। -addStringToArray
बस तब निजी NSArray
पर -addObject
को कॉल करता है, और भी कॉल [self.tableView reloadData]
। इस स्थान पर यह कॉल है, जहां मैं ज्यादातर स्केच आउट हूं (हालांकि मैं अपने समाधान के किसी भी भाग पर ख़ुशी से कोई इनपुट ले सकता हूं)
क्योंकि जब NSTableView
लोड होता है, इसकी 0 पंक्तियाँ हैं, जब डेटा स्रोत
( NSViewController
) विधि -numberOfRowsInTableView
को कहलाता है, यह 0 देता है। यह बदले में यह इसलिए बनाता है प्रतिनिधि
विधि -viewForTableColumn ...
कभी नहीं कहा जाता है, क्योंकि (मैं मान रहा हूँ) यह मानता है कि वहाँ 0 पंक्तियाँ हैं।
इसे पाने के लिए कॉल करने के लिए विधि, मुझे टीएल; डीआर : तालिका प्राप्त हो जाती है 0 पंक्तियों से भरा हुआ एक सरणी में तार जोड़ें। हर बार एक स्ट्रिंग कॉल क्या मैं अपने NSTableView में आइटम को सबसे अच्छे तरीके से जोड़ रहा हूं संभव है? NSTableView
's -reloadData कॉल करने की आवश्यकता है।
reloadData जोड़ा जाता है। यह कॉल
-numberOfRowsInTableView
, जो सरणी का आकार देता है। यह भी -viewForTableColumn ...
को कॉल करने की अनुमति देता है, जो फिर उपयुक्त स्ट्रिंग देता है जो तब तालिका को पॉपुलेट करता है।
आपका दृष्टिकोण ठीक है यह मानते हुए कि आप 10.7 या उसके बाद के लिए तैनाती को लक्षित कर रहे हैं, आप अपने डेटा मॉडल को बदलने के बाद - [NSTableView insertRowsAtIndexes: withAnimation:]
का उपयोग कर सकते हैं। इससे डेटा के पूर्ण पुनः लोड से बचा जाता है।
No comments:
Post a Comment