Iphone 检查NSString的子字符串是否崩溃

Iphone 检查NSString的子字符串是否崩溃,iphone,objective-c,xcode,ios5,Iphone,Objective C,Xcode,Ios5,我试着用两种方法检查NSString中是否出现子字符串,但都失败了。这是从NSManagedObject的一个属性中获取的NSString对象 使用NSRange NSString*searchString=@“驱动器” NSRange range=[字符串的文本范围:搜索字符串选项:(NSCaseInsensitiveSearch)] if(range.location!=NSNotFound){ NSLog(@“找到”); } 使用NSScanner NSScanner*scanner=[N

我试着用两种方法检查NSString中是否出现子字符串,但都失败了。这是从NSManagedObject的一个属性中获取的NSString对象

  • 使用NSRange

    NSString*searchString=@“驱动器”

    NSRange range=[字符串的文本范围:搜索字符串选项:(NSCaseInsensitiveSearch)]

    if(range.location!=NSNotFound){ NSLog(@“找到”); }

  • 使用NSScanner

    NSScanner*scanner=[NSScanner scannerWithString:text]

    NSLog(@“%d”,[scanner scanString:searchString intoString:nil])

  • 当text=@“drive”时,这两种方法都有效,但当文本为“i drive”或“drive to”时,会导致EXC_BAD_访问崩溃。如果文本为“idrive”或“driveto”,则不会发生任何情况

    更奇怪的是,有时示例会抛出nsInvalidargumentException,说我试图将NSCFSet或DateComponents对象传递给rangeOfString:,我在应用程序中都没有使用它们


    有什么想法吗?

    以下内容对我非常有用,包括空格

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

    如果希望它不区分大小写,只需将字符串和搜索字符串都转换为小写。我想你应该知道该怎么做。

    如果你有时收到
    EXC\u BAD\u ACCESS
    消息,有时会收到“你不期望的类型的对象没有响应方法”的消息,那么很可能是你没有将对象保留足够长的时间,并且在你到达使用它的地方之前,它正在被释放


    如果在你到达那里时内存没有被重用,事情就会看起来正常。如果空间已被重新用于另一个对象,并且完全对齐,即相同的指针,则会出现类似“x不响应选择器”的情况。如果它被覆盖,指针没有指向有效的对象,你会得到
    EXC\u BAD\u ACCESS

    什么是文本?它包含什么?它在哪个方法调用上崩溃?如何创建文本?我打赌文本被过度释放,不再有效。@JeremyP我想发生的是我从我的NSManagedObject中得到了string属性,比如:text=managedObject.text;然后我删除managedObject。所以我说文本不包含字符串,它包含一个指向managedObject.text的指针,而managedObject.text已经不存在了,对吗?啊,这很有道理。非常感谢。我希望我能投你一票,但我没有名声。@ntesler:谢谢。不管怎样,接受的答案值15次。