【问题标题】:Need to modify dictionary/array enumeration需要修改字典/数组枚举
【发布时间】:2011-10-20 05:11:01
【问题描述】:

我的搜索栏有以下方法,在exerciseArray 中搜索键exerciseName。这工作正常,但它只是将该键添加到 listOfItems 项目中,然后我使用它来填充单元格的 textLabel。我希望它也有对应的muscleName。谁能告诉我怎么做?我想我需要将 listOfItems 更改为字典,或者有键?

- (void) searchTableView {

    NSString *searchText = searchBar.text;
    NSMutableArray *searchArray = [[NSMutableArray alloc] init];

    for (NSDictionary *dictionary in self.exerciseArray)
    {
        NSString *value = [dictionary objectForKey:@"exerciseName"];
        [searchArray addObject:value];
    }

    for (NSString *sTemp in searchArray)
    {
        NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch];

        if (titleResultsRange.length > 0)
            [listOfItems addObject:sTemp];
    }
    searchArray = nil;
}

当我登录exerciseArray 时:

【问题讨论】:

    标签: iphone objective-c arrays cocoa-touch dictionary


    【解决方案1】:

    直接过滤exerciseArray

    listOfItems = [exerciseArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"exerciseName contains [c] %@",searchText]];
    

    这将返回一个仅包含匹配字典的数组。

    【讨论】:

      【解决方案2】:

      你可以尝试两件事。

      1. 用字典而不是数组填充 UITableView。在这里您可以使用单元格中的字典键和值。
      2. 您可以创建一个类,比如 Workout,它具有 2 个属性 - NSString *exercise 和 NSString *muscle。

      对于第二种方法,您必须将代码修改为

      - (void) searchTableView {
      
          NSString *searchText = searchBar.text;
          NSMutableArray *searchArray = [[NSMutableArray alloc] init];
      
          for (NSDictionary *dictionary in self.exerciseArray)
          {
              NSString *value = [dictionary objectForKey:@"exerciseName"];
          //workout alloc init
          workout.exercise = [dictionary objectForKey:@"exerciseName"];
          workout.muscle = [dictionary objectForKey:@"muscleName"];
      
              [searchArray addObject:workout];
          }
      
           /*See if this is necessary to implement*/
          //for (NSString *sTemp in searchArray)
          //{
             // NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch];
      
              //if (titleResultsRange.length > 0)
                  //[listOfItems addObject:sTemp];
          //}
          //searchArray = nil;
      }
      

      我建议你选择第一种相当简单的方法。


      如果你采用第一种方法,你可以试试这个。

      - (void) searchTableView {
          NSString *searchText = searchBar.text;
      
          for (NSDictionary *dictionary in self.exerciseArray)
          {
              NSString *exerciseName = [dictionary objectForKey:@"exerciseName"];
      
              NSRange titleResultsRange = [exerciseName rangeOfString:searchText options:NSCaseInsensitiveSearch];
      
              if (titleResultsRange.length > 0)
                  [listOfItems addObject:dictionary];
          }
      }
      
      - (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section {
          return [listOfItems count];
      }
      
      - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
          static NSString *stringIdentifier = @"CellIdentifier";
      
          UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:stringIdentifier];
          if (!cell) {
              cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:stringIdentifier];
          }
      
          NSDictionary *dictionary = (NSDictionary *)[listOfItems objectAtIndex:indexPath.row];
      
          [cell.textLabel setText:[dictionary objectForKey:@"exerciseName"]];
          [cell.detailTextLabel setText:[dictionary objectForKey:@"muscleName"]];
      
          return cell;
      }
      

      【讨论】:

      • 我认为第一个选择是要走的路。你能提供一些关于如何做到这一点的细节吗?谢谢。
      • 但是您没有考虑到我在问题中的方法。我需要做的就是修改该方法以输出字典而不是数组。我不确定你在做什么。谢谢。
      • 修改了代码。我希望这次我不会错过任何东西;-)
      猜你喜欢
      • 1970-01-01
      • 2019-11-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-12
      相关资源
      最近更新 更多