【发布时间】:2011-09-05 15:27:15
【问题描述】:
我已尝试以两种方式检查 NSString 中是否出现子字符串,但都已崩溃。这是我从 NSManagedObject 的一个属性中获得的 NSString 对象。
-
使用 NSRange
NSString *searchString = @"drive";NSRange range = [text rangeOfString:searchString options:(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_ACCESS 崩溃。如果文本是“idrive”或“driveto”,则不会发生任何事情。
更奇怪的是,有时示例会抛出 NSInvalidArgumentExceptions,说我试图将 NSCFSet 或 DateComponents 对象传递给 rangeOfString:,但我在我的应用程序中都没有使用它们。
有什么想法吗?
【问题讨论】:
-
什么是文本?它包含什么?
-
哪个方法调用会崩溃?文本是如何创建的?我敢打赌,文本已被过度发布且不再有效。
-
@JeremyP 我认为发生的事情是我从我的 NSManagedObject 获取字符串属性,如下所示: text = managedObject.text;然后我正在删除 managedObject。那么我是否正确地说 text 不包含字符串,它包含指向 managedObject.text 的指针,该指针不再存在?
标签: iphone objective-c xcode ios5