2013-05-03 58 views
0

我正在开发iphone应用程序,它在viewDidLoad中调用arc4random来获取随机数。我的问题是每次应用程序启动时,都会从arc4random获得相同的编号。我应该指出,当我在iPhone设备上测试应用程序并从设备触摸屏启动应用程序时,我会看到这种行为。如果我从xcode的设备上运行应用程序,然后我看到不同的随机数。arc4random始终在应用程序启动时返回相同的初始值

任何帮助或建议,将不胜感激。谢谢。

+2

'arc4random'应该自动播种,这就是为什么没有明确的种子功能。事实上,你永远不应该看到这种行为。你可以发布一些代码吗? – 2013-05-03 10:07:35

+0

为了完整起见,代码行是“int chosen_book =(arc4random()%numberOfBooks)+ 1;” (其中numberOfBooks也是一个值为66的int) – 2013-05-03 10:09:24

+0

此代码是否仅在应用程序启动时运行?如果应用程序未终止但在后台运行,则应用程序:didFinishLaunching :(例如)将不会被后续调用,而Xcode将在运行之前强制终止。 – 2013-05-03 10:20:13

回答

2

arc4random不需要播种,每次打电话时都不应该返回相同的结果。

从您的意见,我觉得你的代码没有被执行,每次你的应用程序来到前台。请记住,当您按主页按钮时,您的应用程序默认情况下不会终止。它将进入背景,并在您再次点击图标时恢复。

如果你的代码在viewDidLoad里面,它只会被调用一次,这意味着你的变量不会被更新,并且每次你检查它时都会包含相同的值。当你从Xcode运行你的应用程序将被完全终止,每一次你会得到预期的行为。

您应该将代码放入viewWillAppear:viewDidAppear:,以便在视图出现在屏幕上时调用它,而不是在视图初始加载时调用。

相关问题