2014-02-06 61 views
2

我有一個NSStringlength 4.邏輯上,這應該工作,並expYear確實,但expMonth拋出一個越界異常?範圍越界大小4目標c

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

閱讀「NSMakeRange」的文檔。 – rmaddy

+1

你顯然是超級有幫助 – TooTiredToDrink

+1

我很認真。對於這樣的問題,您需要做的只是閱讀「NSMakeRange」的參考文檔,您會看到第二個參數的含義。鑑於反對票的數量,其他人似乎同意我的看法。您接受的答案基本上重複了文檔中的內容。 – rmaddy

回答

11

的範圍是locationlength,而不是一個起始和結束位置。

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

因此與2起始位置和3長度超限你結束。

根據正確的規格更改範圍。

+0

你不會說你是否這樣做,但是在運行這段代碼之前,你還應該進行長度檢查。 – Wain

4

範圍並不意味着從假設2到3是從2開始說在這個例子中,你最終用2-5個去未來3個指標的話,那麼這條線是超出範圍:

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

哦!好的謝謝 – TooTiredToDrink