首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只使用iPhone6和Xcode7的iOS9.1中选项崩溃的字符串比较

只使用iPhone6和Xcode7的iOS9.1中选项崩溃的字符串比较
EN

Stack Overflow用户
提问于 2015-12-03 11:13:47
回答 1查看 120关注 0票数 1

iOS9.1中的方法崩溃更早。它是从

代码语言:javascript
复制
(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString

方法是

代码语言:javascript
复制
- (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合作!

下面是编译器的截图

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-03 11:22:20

问题是你的范围

代码语言:javascript
复制
range:NSMakeRange(0, [searchText length])];

比接收者长:searchText = @"Po"是两个字符长,而substring = @"n"只有一个字符长.因此,该方法将引发异常:

范围:用于进行比较的接收器的范围。范围不得超过接收器的范围. 重要 如果范围超过接收器的界限,则引发NSRangeException。(参考文献:iOS API参考)

也许你应该先检查一下searchText.length <= substring.length

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34064518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档