2010-07-25 34 views
0

我發現了一個有趣的新的錯誤與iOS 4:新的NSString substringWithRange:錯誤消息

-[NSCFString substringWithRange:]: Invalid range {11, 4294967295}; this will become an exception for apps linked on SnowLeopard. Warning shown once per app execution.

錯誤是由一個代碼片段,我從一個博客帖子,幫助標題案例字符串了造成的,這並不難解決,但我沒有在其他任何地方看到過,我假設蘋果希望人們停止使用神奇的4294967295號碼。

有沒有人知道這個變化的歷史/背景?

編輯:標題案例代碼的來源位於:http://vengefulcow.com/titlecase/這是objective-c端口(顯然)。第116行是罪犯。顯然這只是在某些特定情況下的一個問題。我仍在追查。

+1

你可以發佈代碼嗎? – 2010-07-25 06:48:17

+1

那麼,4294967295是一個神奇的數字。它是你用32位可以獲得的最高數字,而且自從雪豹64以後它不是。他們可能注意到,因爲iPhone是32位。 – 2010-07-25 06:55:23

+0

你的範圍很大,你可能要經過4294967295,然後它給你一個例外,你不能在iPhone上這樣做。 – 2010-07-25 07:19:50

回答

1

無符號4294967295與-1的帶符號uint32_t值相同。我發現32位應用程序歸檔-1和64位應用程序將它歸檔爲Big Ass Length(在Xcode在64位調用期間調用malloc(4294967295)時非常有趣)。

Cocoa框架正在檢測您是否在長度超過字符串本身的範圍內傳遞。現在警告,截斷結果,但它將是一個嚴重的錯誤。

(在某些情況下,NSNotFound會導致這類問題)。

+0

是的,這是問題所在,也是蘋果公司改變的原因。謝謝。 – Steve 2010-07-25 17:59:58