2

我有4 个NSString。从length逻辑上讲,这应该有效,并且expYear确实有效,但是expMonth会引发越界异常?

expYear = [expDate substringWithRange:NSMakeRange(0, 2)];
expMonth = [expDate substringWithRange:NSMakeRange(2, 3)];
4

2 回答 2

11

范围是 alocation和 a length,而不是开始和结束位置。

typedef struct _NSRange {
    NSUInteger location;
    NSUInteger length;
} NSRange;

因此,您的起点位置2和长度3超出终点。

根据正确的规格更改范围。

于 2014-02-06T15:41:13.913 回答
4

范围并不意味着从 2 到 3,而是说从 2 开始并进入下一个 3 个索引,所以在这个例子中你最终得到 2-5,所以这条线超出了范围:

expMonth = [expDate substringWithRange:NSMakeRange(2, 3)];
于 2014-02-06T15:41:44.830 回答