2013-07-19 18 views
0

我有以下代码,旨在从数组中选择一个随机字符串。NSArray.count返回不正确的巨大整数

NSArray *popupMessages = [NSArray arrayWithObjects: 
          @"Shoulda' been bobbin' and weaving! Need anything from the shop?", 
          @"Don't forget you can use old boss's guns! Available in the shop!", 
          @"Hey Chaz, you Bojo! You need more POWER! Come by the shop for some better weapons!", 
          @"Aw… lame. Maybe I got something that can help you out here at my shop!", 

          nil]; 
int pmCount = popupMessages.count; // Breakpoint Here - pmCount = 971056545 

int messageIndex = arc4random() % pmCount; // Breakpoint Here - same as above 

我使用ARC和cocos2d。关于为什么数组返回如此庞大的数字的任何想法?谢谢!

+3

嗯,考虑到我只是逐字复制了你的代码,它对我来说显示得很好。 – Stakenborg

+0

真的吗?谢谢你这样做 - 确认它可能与xcode等有关,也许是一个可变的冲突。 –

+1

这是我第一次想到,也许你有popupMessages声明为一个属性,它被合成为_popupMessages,但你使用popupMessages没有自我?或者其他的东西?也许?第一步是重命名数组,看看会发生什么。 – Stakenborg

回答

3

你的问题,只是看起来就像是一个调试器神器。例如,它可能与优化有关。有时编译器可能会生成代码,使调试器非常认真地混淆。添加一条日志语句以确保调试器不仅仅告诉你谎言。

+0

再次感谢 - 我一定会在将来首先尝试记录日志。 –

+3

@XenElement - 了解如何使用调试控制台命令。例如,当在第二行的断点处停下时,输入'p(int)[popupMessages count]'来显示计数。比调试变量显示更可靠(由于其不稳定,我几乎不再使用它)。 –

+0

@HotLicks oooh很高兴知道 - 我也得看看这些。 –

0

"count" is not a property, AFAIK

我通常会得到一个数组的计数方法是:

[popupMessages count]; 
+0

好吧downvoters ...我现在看.h文件是肯定的。 –

+0

确切地说,如果不是,编译器会发出警告。 – Macmade

+0

nope,我没有在Foundation的NSArray.h头文件中的任何地方看到“'@ property'”。它*可能会因为某种原因为你工作(例如,使用Cocos2D可能会带来一些魔力),但是如果O.P.使用''[popupMessages count]'“,他/她会得到更好的结果。 –

0

尝试:

NSInteger pmCount = [popupMessages count]; 
+2

我不认为你需要那个'*'。 –

+0

@CarlNorum糟糕!我会编辑答案 –

+1

首先,他的数组只有4个元素,将'count'的结果赋值给'int'肯定不会导致精度的损失,艰难的是不要使用int,但既不是'NSInteger',因为count属性返回一个'NSUInteger' 。 –