2010-07-25 88 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