2010-01-11 53 views
0

我是一個開始的iPhone SDK程序員。我構建了一個簡單的練習應用程序,我試圖用來了解更多關於表格視圖的信息。這是一個應用程序,從plist中加載足球隊,並以球場名稱和徽標以表格形式顯示。攻擊團隊進入該團隊的詳細視圖。添加部分到Xcode的plist用於可可觸摸表視圖

我想了解如何節添加到這一點,所以我可能有一對夫婦在一節團隊和他人在另一部分的等

我想我需要既重結構我的plist並更改代碼以從plist的不同級別讀取數組?

首先,我有一個plist,包含3個詞典的根數組,每個團隊一個。每個字典有3個鍵,「名稱」,「體育場」和「標誌」。這工作正常。我通過加載它:

NSString *path = [[NSBundle mainBundle] pathForResource:@"teams" ofType:@"plist"]; 
teams = [[NSMutableArray alloc] initWithContentsOfFile:path]; 

然後

// Configure the cell. 
NSDictionary *team = [teams objectAtIndex:indexPath.row]; 
cell.textLabel.text = [team objectForKey:@"name"]; 
NSString *imgPath = [team valueForKey:@"logo"]; 
cell.imageView.image = [UIImage imageNamed:imgPath]; 
cell.detailTextLabel.text =[team objectForKey:@"stadium"]; 
return cell; 

沒問題。但現在我想要的部分,所以我改變了我的plist到:

<array> 
<dict> 
    <key>teams 1</key> 
    <array> 
     <dict> 
      <key>name</key> 
      <string>Packers</string> 
      <key>stadium</key> 
      <string>Lambeau Field</string> 
      <key>logo</key> 
      <string>packers.jpg</string> 
     </dict> 
     <dict> 
      <key>name</key> 
      <string>Jets</string> 
      <key>stadium</key> 
      <string>Giants Stadium</string> 
      <key>logo</key> 
      <string>jets_logo.jpg</string> 
     </dict> 
    </array> 
</dict> 
<dict> 
    <key>teams 2</key> 
    <array> 
     <dict> 
      <key>name</key> 
      <string>Cincinnati Bengals</string> 
      <key>stadium</key> 
      <string>Paul Brown Stadium</string> 
      <key>logo</key> 
      <string>bengals.jpg</string> 
     </dict> 
    </array> 
</dict> 

而且我不確定如何修改viewDidLoad中分配的部分,以一個的NSArray和團隊「級別」到另一個陣列。

回答

0

首先,您需要使用數組作爲數據結構的前兩個級別。字典是無序的,因此很難將它們用作表格格式的數據源。將它們用於單個單元格中顯示的每條記錄的數據是很好的。要將字典作爲表格格式數據使用,您必須將其密鑰存儲到數組中,以便每個密鑰都有一個特定的數字索引,以供表格用來查找密鑰。

你會需要這樣的東西在你的UITabelViewDataSource類以下內容:

@property(nonatomic, retain) NSArray *sectionNames; 
... 
NSArray *sectionNames=[teams allKeys]; 

在你UITabelViewDataSource類,你需要這些方法:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ 
    return [self.sectionNames count]; 
} 

這將返回在桌子部分的數量,其在你的情況下代表頂級字典中的對象數量。

- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section{ 
    return [[teams valueForKey:[self.sectionNames objectAtIndex:section] count]; 
} 

這將返回其在你的情況下,意味着對象的每個第二電平字典返回存儲在每個sectionName元素的鍵的數目在每個部分中的行數。

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{ 
     return [self.sectionNames objectAtIndex:section]; 
} 

這將返回將顯示每個節標題的名稱,在您的情況下是每個第一級字典值的關鍵。

除非您特別需要按鍵引用各部分,否則應該考慮將除團隊數據以外的所有內容都存儲在數組中而不是字典中。它會讓你的表更容易實現。