2009-10-24 52 views
0

當設置一個UITableView的數據來源,我很想得到意見,這是更好,解決答:爲UITableViewCell選擇字符串 - 數組還是switch語句?

NSString *labelText; 

switch (indexPath.row) { 
    case 0: 
     labelText = @"Setup New Match"; 
     break; 
    case 1: 
     labelText = @"Teams"; 
     break; 
    case 2: 
     labelText = @"Players"; 
     break; 
    case 3: 
     labelText = @"Archive"; 
     break; 
} 

cell.textLabel.text = labelText; 

或溶液B?

NSArray *labels = [NSArray arrayWithObjects:@"String 1", @"String 2", @"String 3", @"String 4", nil]; 

cell.textLabel.text = [labels objectAtIndex:indexPath.row]; 

在我乾的風扇向溶液B趨向,但後來我創建的每個循環數組只是提取一個對象的目的。是否有任何特別的理由使用這兩種解決方案之一,還是僅僅是個人偏好?

回答

2

當我這樣做時,我使用了一個switch語句。但是,如果你想要去與陣列方法,而不是創建一個數組每一次,你可以使用一個靜態C數組或東西:

static NSString * const labels[] = {@"String 1", @"String 2", @"String 3", @"String 4"}; 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    //Get the cell in the normal way. No array stuff here 
    //... 
    cell.textLabel.text = labels[indexPath.row]; 
} 
+0

良好的妥協。當我不使用UITableViewGrouped時,我這樣做。 – Amagrammer 2009-10-25 15:05:57

1

如果你是堅持解決方案B的粉絲,你可以讓你的標籤數組是靜態的,這將消除每次創建數組的開銷。

就哪個更好而言,雖然B在這個簡單的例子中肯定是最優雅的,但它也是最不靈活的。圖像是一種情況,您可以對每個單元格進行不同的圖像更改,選項A使這一更改變得更加乾淨和可維護。

1

我喜歡的解決方案A.

除非你的數組是預先退出我不會用B.這就是說,我工作的一個應用程序使用的部分,並使用switch語句來確定哪些部分,然後我用預先存在的數組中的數據填充它。