2015-09-25 45 views
1

拍攝範圍越界異常,我在Xcode收到此錯誤信息:不能在Objective-C

-[__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); 
    } 

沒有任何catch塊正在執行。

我試着將我的部署目標設置爲8.4。

任何幫助將非常感謝!

+0

你不需要try/catch。使用調試器查看應用程序崩潰的位置。 – rmaddy

+0

它不會崩潰...... – user714171

+0

你是什麼意思「它攤位」?你的意思是調試器停止在導致問題的線路上? – rmaddy

回答

3

大值18446744073709551615是NSNotFound(2^64-1,可以用64位表示的最大整數)的值。

您可能首先在另一個字符串中查找(子)字符串左右,但未找到該子字符串。而不是一個有效的索引,你可以回到NSNotFound。大概你沒有想到或測試這種特殊情況,並將NSNotFound的值傳遞給NSMakeRange(),從而引發錯誤。

如果您所指定的只有少數幾個地方叫NSMakeRange,那麼您應該能夠(1)驗證此假設,並且(2)純粹通過檢查代碼來修復該錯誤。