2013-11-26 45 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