iOS9.1中的方法崩溃更早。它是从
(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString方法是
- (void)filterContentForSearchText:(NSString*)searchText
{
[self.searchResults removeAllObjects]; // First clear the filtered array.
for (NSArray *contactsInSection in self.sections)
{
for (Contact *contact in contactsInSection)
{
NSArray *substringArray = [[contact displayName] componentsSeparatedByString:@", "];
for (NSString *substring in substringArray)
{
NSComparisonResult result = [substring compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:NSMakeRange(0, [searchText length])];
if (result == NSOrderedSame)
{
[self.searchResults addObject:contact];
break;
}
}
}
}
}崩溃的行是带有比较:子字符串比较:searchText.的行。;
这一问题发生在iPhone6设备的in 9.1中。与iPhone5合作!
下面是编译器的截图

发布于 2015-12-03 11:22:20
问题是你的范围
range:NSMakeRange(0, [searchText length])];比接收者长:searchText = @"Po"是两个字符长,而substring = @"n"只有一个字符长.因此,该方法将引发异常:
范围:用于进行比较的接收器的范围。范围不得超过接收器的范围. 重要 如果范围超过接收器的界限,则引发NSRangeException。(参考文献:iOS API参考)
也许你应该先检查一下searchText.length <= substring.length
https://stackoverflow.com/questions/34064518
复制相似问题