Проверьте подстроку сбоя NSString - PullRequest
5 голосов
/ 05 сентября 2011

Я попытался проверить наличие подстроки в строке NSString двумя способами, оба произошли сбой. Это объект NSString, который я получаю из одного из свойств моего NSManagedObject.

  1. Использование NSRange

    NSString *searchString = @"drive";

    NSRange range = [text rangeOfString:searchString options:(NSCaseInsensitiveSearch)];</p> <p>if (range.location != NSNotFound) { NSLog(@"Found"); }

  2. Использование NSScanner

    NSScanner *scanner = [NSScanner scannerWithString:text];</p> <p>NSLog(@"%d",[scanner scanString:searchString intoString:nil]);

Обе они работают, когда text = @ "drive", но вызывают EXC_BAD_ACCESS, когда текст выдает "i drive" или "drive to". Ничего не происходит, если текст "idrive" или "driveto".

Даже более странно, иногда в примерах выбрасываются NSInvalidArgumentExceptions, говоря, что я пытался передать объект NSCFSet или DateComponents в rangeOfString:, который я не использую в своем приложении.

Есть идеи?

Ответы [ 2 ]

5 голосов
/ 05 сентября 2011

Если вы иногда получаете EXC_BAD_ACCESS, а иногда получаете сообщение " объект типа вы не ожидали не отвечает на метод " скорее всего, выне удерживают объект достаточно долго, и он освобождается, прежде чем вы доберетесь до того места, где вы его используете.

Если память не была повторно использована, когда вы туда доберетесь, все будет работать.Если пространство было повторно использовано для другого объекта и выровнено идеально, то есть с тем же указателем, вы получите что-то вроде «x не отвечает на селектор».Если он перезаписан таким образом, что указатель не указывает на допустимый объект, вы получите EXC_BAD_ACCESS

5 голосов
/ 05 сентября 2011

Следующее сработало идеально для меня, включая пробелы.

NSString *string = @"hello one two three";
if ([string rangeOfString:@"one two"].location == NSNotFound) {
    NSLog(@"string does not contain substring");
} else {
    NSLog(@"string contains substring!");
}

И если вы хотите, чтобы оно не учитывало регистр, просто преобразуйте строку и строку поиска в нижний регистр.Думаю, ты должен знать, как это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...