我有视图在后台显示图像。从一组图像中挑选图像,我使用随机函数来挑选它们。在这样做的应用程序崩溃,但只在iPhone 5 / 5S上。
这是我的代码: ...
//Images
let rest28 = UIImage(named: "rest28")
let rest29 = UIImage(named: "rest29")
let rest30 = UIImage(named: "rest30")
// image Array
imageArray = [rest1!, rest3!, rest4!, rest5!, rest6!, rest7!, rest8!, rest9!,
rest10!, rest11!, rest12!, rest13!, rest15!, rest17!, rest18!, rest21!, rest22!, rest24!, rest25!, rest26!, rest27!, rest28!, rest29!, rest30!]
// Picking a number in the array of images.
let randomImageSelection = 0 + Int(arc4random()) % (0 - imageArray.count - 1)
backgroundImage.image = imageArray[randomImageSelection]
这是我在randomImageSelection函数上遇到的崩溃:
- 无法在(UIView)上设置(isHomeScreenImage)用户定义的检查属性:[setValue:forUndefinedKey:]:此类不是键值isHomeScreenImage的密码值编码。
提前感谢您的帮助。 :)
答案 0 :(得分:3)
UInt32
产生无符号的32位整数(Int
)。标准Int32
对应于iPhone 5(iPhone 5 - 1.3 GHz dual core 32-bit ARMv7-A processor),Int(arc4random())
类型上的32位(带符号)整数,在这种情况下UInt32
将产生一个(n)(整数)溢出)运行时异常〜平均上行运行时间的50%。为什么? Int32
类型可表示的数字中有一半太大,无法用print(INT32_MAX) // 2147483647
print(UINT32_MAX) // 4294967295 <-- max return of arc4random()
类型表示。
arc4random()
使用arc4random_uniform()
函数,您无需在32位无符号整数范围内生成任何随机数;另一种方法是使用0..<30
生成let randomImageSelection = arc4random_uniform(UInt32(imageArray.count))
/* random Integer in: 0 ..< imageArray.count */
范围内的随机数。尝试使用以下内容替换您标记为错误的行:
Media.MEDIA_RUNNING
密切相关的主题(这可能是重复的),谢谢@Eric D。