2013-11-26 94 views
0

任何人都可以提出建議做下面的最佳方法嗎?如何填充UITableView中的部分

我有一個UIViewController上有3個按鈕。爲了清楚起見,按鈕: 1.酒店 2.購物 3.室內活動

點擊一個按鈕,它會去一個UITableView,將具有與該按鈕相關聯的企業名單。 因此點擊酒店,會顯示酒店列表。

但我的問題如下。

對於酒店和購物而言,UITableView將需要有一些部分來消除例如,來自四星級酒店的三星級酒店。 而購物則需要在UITableView中至少有12個不同的部分。 室內活動將沒有部分 - 只有一個企業名單。

要填充UITableView,我從.csv文件中讀取所有企業的列表。 在我的.csv文件中,我給每組企業一個ID,例如酒店(3星級和4星級)爲ID 1,購物(全部12個不同部分)爲ID 2,室內活動爲ID 3 以下是.csv文件的樣例。

ID, Company Name, Address, Tel, Email, Website, Details, Image Name 

我已成功地閱讀一組的企業名單,但我無法把旅館和購物中心段。 我試過以下。對於例如酒店我添加2個數組,然後檢查每個酒店的名稱。如果酒店名稱是例如1A或2A,我將它添加到3星陣列中,並且如果它的例如1B或2B我將它添加到4星陣列。 但這是非常乏味的,並不是我想象的最佳實踐。 由於購物部分包含數十家企業,它會變得更加乏味。所以我不能單獨檢查每個企業名稱。 以下是我如何將Business Objects添加到NSMutableArray _array來定義節。但是就像我提到的那樣,所有的商業名稱都要檢查,這將變得非常單調乏味。

- (NSArray *) csvArray2PresidentsArray:(NSArray *)csvArray 
{ 
    int i = 0; 

    for (NSArray *row in csvArray) 
    { 
     // The first row is a header - SKIP 
     if (i > 0) 
     { 
      BusinessDetailContent *_businessDetailContent = [[BusinessDetailContent alloc] init]; 
      _businessDetailContent.no   = [row objectAtIndex:0]; 
      _businessDetailContent.companyName = [row objectAtIndex:1]; 
      _businessDetailContent.address  = [row objectAtIndex:2]; 
      _businessDetailContent.tel   = [row objectAtIndex:3]; 
      _businessDetailContent.email  = [row objectAtIndex:4]; 
      _businessDetailContent.website  = [row objectAtIndex:5]; 
      _businessDetailContent.details  = [row objectAtIndex:6];  
      _businessDetailContent.imageName = [row objectAtIndex:7]; 

      // USE TO FILTER RESULTS 
      NSString *strFromInt = [NSString stringWithFormat:@"%d", self.tagNumber]; 

      if ([_businessDetailContent.no isEqualToString:@"1A"] || 
      [_businessDetailContent.no isEqualToString:@"2A"]) 

      { 
       [_threeStarArray addObject: _businessDetailContent]; 
      } 

    else if ([_businessDetailContent.no isEqualToString:@"1B"] || 
       [_businessDetailContent.no isEqualToString:@"2B"]) 

      { 
     [_fourStarArray addObject: _businessDetailContent]; 
      } 
     } 
     i++; 
    } 

    [_array addObject: _threeStarArray]; 
[_array addObject: _fourStarArray]; 

    return (NSArray *) self.filteredArray; 
} 

是否有更好的方法來檢查/處理呢?我曾考慮過向.csv文件添加另一個字段,以定義例如酒店爲3星或4星。對於所有的企業也是如此。 然後在上面的代碼中,我可以掃描這個二級ID,並根據它是什麼,我將它添加到它自己的數組/節?

回答

1

爲此,我會更傾向於給我們一個NSMutableDictionary,堅持價值在那裏:

[aDict setValue:threeStarArray forKey:@"three_star"]; 

等..然後你可以獲取數據明確,它更整潔,而不是堅持一切項目放入1個數組中。然後您可以通過鍵值區分tableview中的各個部分。

而且當你回來時(假設self.filteredArrayNSArray)你不需要投NSArray