2011-12-18 7 views
2

Я хочу посмотреть, есть ли строка, которая является заголовком сообщения в ленте новостей apple rss, содержит подстроку, например. «Стив» или «Вакансии». Я организовал сообщения в uitableview.Как увидеть, содержит ли строка подстроку (цель-с)

Так Был пост, который был Стив или Джобса в его названии, так что я использовал это, чтобы проверить:

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

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

Но это никогда не называли, запись класс RSSItem, который содержит название - запись и его название не является моей проблемой, я проверил. Моя проблема - это проблема. Как сравнить

UPDATE!

Ok вот код:

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

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


} 

Я пробовал другие народы путь также, но тот же результат:

некоторые клетки имеют свои ImageView, как steve.png, даже если их название оленья кожа содержит рабочие СТИВ , Weird ??? Я прокручиваю вниз, и когда я возвращаюсь обратно, все перегруженные ячейки, которые перераспределены и инициализированы, имеют изображение работы на сцене. При запуске, когда я открываю приложение, некоторые ячейки, которые не имеют steve в своем названии, НЕ ИМЕЮТ ИЗОБРАЖЕНИЕ, а затем это происходит.

Мой окружающий код ЕСЛИ НУЖНО:

-(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; 

    } 
+1

Пожалуйста, дайте текст несколько ячеек, которые ложно матч " Стив". –

+1

И вы удаляете изображение из переработанных ячеек, которые * не * «Стив»? Для меня это не похоже. –

+0

Текст нескольких ячеек, которые ложно соответствуют Стиву: заявление директоров Apple совета 100 миллионов OSX Lion загрузок в день – user973985

ответ

1

«а затем, когда я прокручивать обратно все переработанные клетки имеют рабочие места стив изображения»

Это потому, что вы не сбросить изображение в перерабатываемых клетках. (Попробуйте добавить

else { 
    cell.imageView.image = nil; 
} 

в соответствующем месте.)

6

Вы сравнив всю строку, а «Стив Джобс» не будет соответствовать либо «Стив» или «Работа». Вероятно, вы хотите использовать rangeOfString:@"Steve" options:NSCaseInsensitiveSearch, или некоторые из них.

+0

, но это не скажет мне, если Стив находится в строке – user973985

+0

, которая возвращает NSRange нигде рядом с тем, что я хочу Я в основном хочу НАЙТИ IF Стив находится внутри заголовка, поэтому я могу сделать изображение изображения. Просмотр ячейки изображения работы steve. – user973985

+0

Он делает именно то, что вы хотите. Если вы прочтете документацию, она вернет 'NSRange'' {NSNotFound, 0} ', если строка не содержится. – paulbailey

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.' 
} 
+0

+1 Использование опции «options: NSCaseInsensitiveSearch» выполняет задачу OP (очевидная) поиска без учета регистра. –

+0

почему-то это сравнение называется EVEN, КОГДА ЭТО НЕ ИСТИННО Проверьте мой обновленный вопрос – user973985

2

Если вы на iOS8 вы можете сделать это сейчас, как:

NSString *stringToSearch = @"Steve"; 
    if ([stringToSearch containsString:@"Steve"]) 
    { 
     NSLog(@"String contains Steve!!!"); 
    } 
    else 
    { 
     NSLog(@"String does not contain Steve!!!"); 
    } 
Смежные вопросы