2013-11-26 5 views
5

में UITableView के लिए एक अच्छी डेटा संरचना क्या होगी आमतौर पर मैं एक सरणी में डेटा संग्रहीत करता हूं। फिर, जब cellForRowAtIndexPath कहा जाता है तो मैं पंक्ति को देखता हूं और पंक्ति और प्रक्रिया के आधार पर सरणी पर एक आइटम का चयन करता हूं।समूहित मोड

लेकिन UITableView जैसा कि हम जानते हैं समूह दृश्य कर सकते हैं।

तो मुझे क्या करना चाहिए?

क्या मेरे पास सरणी की सरणी होनी चाहिए? सरणी का एक NSDictionary? UITableView संरचना में डेटा स्टोर करने का सबसे शानदार तरीका क्या होगा?

उत्तर

10

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

NSArray *dataSource = @[ 
        @{@"title": @"Section 0", 
         @"rows" : @[ item00, item01, item02] }, 
        @{@"title": @"Section 1", 
         @"rows" : @[ item10, item11, item12] }, 
        @{@"title": @"Section 2", 
         @"rows" : @[ item20, item21, item22] }, 
        ]; 

आइटम तार या एक कस्टम वर्ग की वस्तुओं हो सकता है। तो फिर तुम तरह

Item *item = dataSource[indexPath.section][@"rows"][indexPath.row]; 

cellForRowAtIndexPath में प्रत्येक आइटम का उपयोग कर सकते हैं और अन्य सभी डेटा स्रोत तरीकों में भी आसानी से लागू कर रहे हैं।

+0

बहुत बढ़िया। मैं यही सोच रहा हूं। –

+0

यह करने का यह एक शानदार तरीका है। यह सभी UITableView संबंधित कोड को साफ और प्रबंधित करने में आसान रखने में मदद करता है। – dustinrwh

0

@ मार्टिन उत्तर उद्देश्य-सी के लिए सही है लेकिन स्विफ्ट में, हमारे पास शब्दकोश के लिए परिवर्तनीय types होने की लक्जरी नहीं है। प्रकार पूर्वनिर्धारित हैं।

हमें struct या कस्टम डेटा प्रकार के आसपास काम करने की आवश्यकता होगी।

struct Model<Item>{ 
    let title: String 
    let rows: [Item] 

    subscript(index: String) -> [Item] { 
    get { 
     return rows 
    } 
    } 
} 

let model1 = Model(title: "Secton 0", rows: ["A", "B", "C"]) 
let model2 = Model(title: "Secton 1", rows: ["D", "E", "F"]) 

let dataSource = [model1, model2] 

// You can query 
dataSource[indexPath.section][rows][indexPath.row] 
संबंधित मुद्दे