2010-08-03 10 views
7

से एनएसटीबलव्यू पॉपुलटिंग मैं दो दिनों के लिए इसका प्रयास कर रहा हूं, और लगातार मृत सिरों में दौड़ रहा हूं।एक म्यूटेबल सरणी

मै मैक ओएस एक्स के लिए हारून हिलेगैस के कोको प्रोग्रामिंग के माध्यम से किया गया है, और एनएसटीबलव्यू और म्यूटेबल एरे से निपटने वाले सभी प्रासंगिक अभ्यास किए हैं, और मैं अपनी आवश्यकताओं के अनुरूप उन्हें संशोधित करने का प्रयास कर रहा हूं।

हालांकि उनमें से कोई भी डेटा स्रोत के रूप में ऑब्जेक्ट्स के साथ एक सरणी का उपयोग नहीं कर रहा है, ऐसा लगता है कि तालिकादृश्य को डेटा स्रोत के रूप में उपयोग करना प्रतीत होता है।

मैं जोनास जोंजजन के "पुनर्विक्रय" को अपने कोड here के परिणामों को प्रदर्शित करने के लिए कोको फ्रंट एंड के साथ लागू करने की कोशिश कर रहा हूं।

कोई भी पॉइंटर्स या सुझाव जो मुझे पता है यह सरल होना चाहिए, लेकिन मैं यहां जंगल में खो गया हूं।

मैं सरणी

उत्तर

14

यह एक बार आप इसे समझने के लिए मिलता है, वास्तव में बहुत सरल है के आधार पर अपने सरणी का उपयोग करने के लिए उन प्रतिनिधि तरीकों का उपयोग (जाहिर है!)। आप तालिका स्रोत के रूप में सीधे एनएसएआरएआरई का उपयोग नहीं कर सकते हैं। आपको या तो एक कस्टम ऑब्जेक्ट बनाना होगा जो NSTableViewDataSource लागू करता है या उस मौजूदा प्रोटोकॉल में प्रोटोकॉल को लागू करता है - आमतौर पर एक नियंत्रक। यदि आप एक मानक दस्तावेज़ आधारित अनुप्रयोग बनाने के लिए एक्सकोड का उपयोग करते हैं, तो दस्तावेज़ नियंत्रक वर्ग - (इसे MyDocument कहा जाएगा) उपयोग करने के लिए एक अच्छी कक्षा है।

आपको कम से कम इन दोनों तरीकों को लागू करने की जरूरत है:

– numberOfRowsInTableView: 
– tableView:objectValueForTableColumn:row: 

आप एक परिवर्तनशील सरणी जिनके मान आप एक स्तंभ, की तरह कुछ के साथ एक तालिका दृश्य में उपयोग करने के लिए चाहते हैं, तो के रूप में करना चाहिए निम्नलिखित एक शुरुआत:

– numberOfRowsInTableView: (NSTableView*) aTableView 
{ 
    return [myMutableArray count]; 
} 

– tableView: (NSTableView*) aTableView objectValueForTableColumn: (NSTableColumn *)aTableColum row: (NSInteger)rowIndex 
{ 
    return [myMutableArray objectAtIndex: rowIndex]; 
} 

यह सिर्फ मेरे लिए हुआ है आप NSArray self साथ myMutableArray की जगह के लिए एक वर्ग के रूप में ऊपर दो तरीकों जोड़ सकते हैं और फिर आप डेटा स्रोत के रूप एक सरणी का उपयोग कर सकते हैं।


वैसे भी, एक अस्थायी सरणी के साथ, यह महत्वपूर्ण है कि किसी भी समय आप इसे बदल, आप तालिका दृश्य जाने के लिए पता है कि यह बदल दिया गया है, ताकि आप तालिका दृश्य -reloadData भेजने की जरूरत की जरूरत है।


अपने तालिका दृश्य एक से अधिक स्तंभ है और आप अपने सरणी में वस्तुओं के गुणों से पॉप्युलेट करना चाहते हैं, वहाँ एक चाल आप इसे खुद के लिए आसान बनाने के लिए क्या कर सकते हैं।मान लें कि आपका सरणी में वस्तुओं एक वर्ग दो तरीकों के साथ व्यक्ति कहा जाता है के उदाहरण परिभाषित कर रहे हैं करते हैं:

-(NSString*) givenName; 
-(NSString*) familyName; 

और आप अपने तालिका दृश्य उन में से प्रत्येक के लिए एक कॉलम करना चाहते हैं, तो आप प्रत्येक स्तंभ के identifier संपत्ति सेट कर सकते हैं

– tableView: (NSTableView*) aTableView objectValueForTableColumn: (NSTableColumn *)aTableColum row: (NSInteger)rowIndex 
{ 
    Person* item = [myMutableArray objectAtIndex: rowIndex]; 
    return [item valueForKey: [tableColumn identifier]]; 
} 

आप valueForKeyPath: साथ valueForKey: की जगह और अपने व्यक्ति वर्ग भी निम्न विधियों है:

व्यक्ति में संपत्ति के नाम पर उस कॉलम प्रदर्शित करता है और निम्नलिखित की तरह कुछ का उपयोग करने के
-(Person*) mother; 
-(Person*) father; 
-(NSString*) fullName; // concatenation of given name and family name 

आप पहचानकर्ताओं के साथ तालिका कॉलम जोड़ सकते हैं जैसे: father.fullName या mother.familyName और मान स्वचालित रूप से पॉप्युलेट हो जाएंगे।

1

एप्पल इतना प्रोग्रामिंग मैं सुझाव है कि आप कि गाइड के Using a Table Data Source अनुभाग के साथ शुरू तालिका दृश्य के लिए एक पूरी गाइड है की स्थापना करके तालिका पॉप्युलेट कर सकते हैं।

+1

यह लिंक काम नहीं करता !! कृपया इसे अपडेट करें! – elin3t

1

आईफोन पर (मुझे पता है कि आप मैक के बारे में बात कर रहे हैं, लेकिन शायद यह मदद कर सकता है) आपको टेबल व्यू लोड करने के लिए प्रतिनिधिमंडल का उपयोग करना होगा। यह एक सेल के लिए पूछता है और जहां आवश्यक हो वहां डेटा भरने के लिए आप अपनी सरणी का उपयोग करते हैं। मुझे यकीन नहीं है कि यह मैक के लिए काम करता है, लेकिन यह देखने लायक होगा।

हो सकता है कि आत्म करने के लिए डेटा स्रोत सेट और पर पंक्ति और स्तंभ #

+0

@ willcodejavaforfood का जवाब आईफोन के लिए है, लेकिन आप यह देखने के लिए उस लिंक का अनुसरण कर सकते हैं कि मेरा मतलब क्या है – RSully

+0

ओह, मुझे अपने दिमाग पर आईफोन मिल गया :) – willcodejavaforfood

3

आप डेटा स्रोत मार्ग पर जा सकते हैं और अपने आप को भारी उठाने के लिए कर सकते हैं, या आप बाइंडिंग को आपके लिए भारी भारोत्तोलन करने दे सकते हैं। Nib फ़ाइल में NSArrayController जोड़ें जिसमें तालिका दृश्य है। सुनिश्चित करें कि निब का फ़ाइल का स्वामी उसी वर्ग पर सेट है जिसमें इसमें म्यूटेबल सरणी है। पर सरणी नियंत्रक के contentArray को बांधें। प्रत्येक कॉलम के लिए Value को सरणी नियंत्रक arrangedObjects पर बांधें और उपयुक्त कुंजी पथ जोड़ें। यदि आपको कभी इसकी आवश्यकता हो तो यह आपको उपयोगकर्ता सॉर्टिंग जैसी चीजों को मुफ्त में प्राप्त करने की अनुमति देगा।