如何查看字符串是否包含子字符串(objective-c)

时间:2011-12-18 04:50:25

标签: objective-c xcode string compare substring

我想查看一个字符串,它是apple rss新闻Feed中帖子的标题是否包含子字符串,例如“史蒂夫”或“乔布斯”。我把这些帖子组织成了一个uitableview。

所以有一个帖子里有史蒂夫或乔布斯的标题,所以我用它来检查:

   if ([[entry title] localizedCaseInsensitiveCompare:@"Steve"] == NSOrderedSame ||        [[entry title] localizedCaseInsensitiveCompare: @"Jobs"] == NSOrderedSame) {

    NSLog(@"Comparism of Steve Jobs");
    cell.imageView.image = [UIImage imageNamed:@"steve.png"];
}

但它从未被调用过,entry是一个包含标题的RSSItem类 - 条目及其标题不是我的问题,我已经检查过了。我的比较是问题所在。我如何比较

UPDATE!

好的,这里是代码:

NSRange range = [[[cell textLabel] text] rangeOfString:@"Steve" options:NSCaseInsensitiveSearch];

if (range.location != NSNotFound) 
{
    cell.imageView.image = [UIImage imageNamed:@"steve.png"];


}

我也尝试了其他人的方式,但同样的结果:

有些单元格的imageView为steve.png,即使它们的标题不包含史蒂夫作业。奇怪的???我向下滚动,当我回到原位时,所有重新分配和初始化的出列单元都有史蒂夫作业图片。在我打开应用程序的开始时,一些没有标题史蒂夫的细胞都有图像,然后发生上述情况。

我需要的周围代码:

  -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

UITableViewCell *cell = [tableView
                         dequeueReusableCellWithIdentifier:@"UITableViewCell"];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                   reuseIdentifier:@"UITableViewCell"]
            autorelease];
}


tableView.autoresizingMask = 5;
tableView.autoresizesSubviews = YES;
cell.autoresizingMask = 5;
cell.frame = CGRectMake(cell.frame.origin.x, cell.frame.origin.y, 20, 20);
RSSItem *item = [[channel items] objectAtIndex:[indexPath row]];
[[cell textLabel] setText:[item title]];
NSMutableString *string = [[NSMutableString alloc] initWithString:[[cell textLabel] text]];

if (string.length > 46) {
    cell.textLabel.numberOfLines = 2;
    UILineBreakMode lineBreak = UILineBreakModeClip;
    cell.textLabel.lineBreakMode = lineBreak;

}

[string release];

tableView.backgroundColor = [UIColor darkGrayColor];
cell.textLabel.font = [UIFont fontWithName:@"Arial Rounded MT Bold" size: 12.0];
cell.backgroundColor = [UIColor whiteColor];

NSRange range = [[[cell textLabel] text] rangeOfString:@"Steve" options:NSCaseInsensitiveSearch];

if (range.location != NSNotFound) 
{
    cell.imageView.image = [UIImage imageNamed:@"steve.png"];


    }



return cell;

    }

4 个答案:

答案 0 :(得分:12)

NSString-rangeOfString返回一个NSRange,可以检查“未找到”的情况。

if ([@"Some awesome string." rangeOfString:@"awesome"].location != NSNotFound)
{
  // awesome is in 'Some awesome string.'
}
else 
{
 // awesome is not in 'Some awesome string.' 
}

答案 1 :(得分:6)

您正在比较整个字符串,而“史蒂夫乔布斯”与“史蒂夫”或“乔布斯”都不匹配。您可能希望使用rangeOfString:@"Steve" options:NSCaseInsensitiveSearch或其他类似的内容。

答案 2 :(得分:2)

如果你在iOS8上,你现在可以这样做:

  NSString *stringToSearch = @"Steve";
  if ([stringToSearch containsString:@"Steve"])
  {
      NSLog(@"String contains Steve!!!");
  } 
  else 
  {
      NSLog(@"String does not contain Steve!!!");
  }

答案 3 :(得分:1)

“然后当我向后滚动所有回收的细胞都有史蒂夫工作图像”

那是因为你没有重置再生细胞中的图像。 (尝试添加

else { 
    cell.imageView.image = nil; 
}

在适当的地方。)