[英]string comparison with options crashes in iOS9.1 with iPhone6 only and Xcode7
该方法在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;
}
}
}
}
}
崩溃的行是具有比较的行:[substring compare:searchText ....];
在装有iPhone6设备的iOS9.1中会发生此问题。 适用于iPhone5 !!!
这是编译器的屏幕截图
问题是你的范围
range:NSMakeRange(0, [searchText length])];
比接收者长: searchText = @"Po"
长度为2个字符,而substring = @"n"
长度仅为1个字符。 因此,该方法将引发异常:
range :执行比较的接收器范围。 范围不得超过接收器的范围。
重要
如果范围超出接收者的范围,则引发NSRangeException。
(参考: iOS API参考 )
也许您应该首先检查searchText.length <= substring.length
吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.