无法捕获 Objective-c 中的范围越界异常

Can't catch range out of bounds exception in Objective-c

我在 xCode 中收到此错误消息:

-[__NSCFString substringWithRange:]: Range {18446744073709551615, 1} out of bounds; string length 71. This will become an exception for apps linked after 10.10 and iOS 8. Warning shown once per app execution.

我正在尝试查找代码中发生这种情况的位置。

我的项目中有十几个 substringWithRange 方法。我在它们周围放置了 try catch 块:

 @try {
        substring = [s substringWithRange:NSMakeRange(i, j - i)];
    }
    @catch (NSException* e) {
        NSLog(@"Except: %@", e);
    }

None 个 catch 块正在执行。

我尝试将我的部署目标设置为 8.4。

如有帮助将不胜感激!

大值18446744073709551615是NSNotFound的值(2^64-1,64位能表示的最大整数)

您可能首先在另一个字符串中寻找(子)字符串,但未找到该子字符串。您返回的不是有效索引 NSNotFound。大概你没有预料到或测试这种特殊情况并将 NSNotFound 值传递给 NSMakeRange(),在那里触发了错误。

如果只有少数地方调用 NSMakeRange,如您所指出的,那么您应该能够 (1) 验证这个假设,以及 (2) 完全通过检查代码。