String(format :)方法在iOS 7中崩溃我的应用程序,但它在iOS 8中工作正常。有什么我可以用来获得相同的效果在这两种方法都适用吗?
我收到的错误消息是:THREAD 1: EXC_BAD_ACCESS (code=1, address=0x20)
,控制台中只有(lldb)
。
我在所有7.1模拟器设备和iPhone 4 7.1.2设备上出现此错误。
func configureLoadingIcon() {
loadingImage.alpha = 0.0
loadingImage.animationImages = [UIImage]()
for var index = 0; index < 48; index++ {
// Need an alternative to this line
var frameName = String(format: "loading_%05d", index)
loadingImage.animationImages?.append(UIImage(named: frameName)!)
}
loadingImage.animationDuration = 1.3
loadingImage.startAnimating()
}
//修改
我现在正在这样做......但iOS 7仍然没有快乐......
func configureLoadingIcon() {
loadingImage.alpha = 0.0
loadingImage.animationImages = [UIImage]()
var frameName: String
for var i = 0; i < 48; i++ {
let formatter = NSNumberFormatter()
formatter.minimumIntegerDigits = 2
let formattedIndex = formatter.stringFromNumber(i)
var frameName = String(format: "loading_000%@", formattedIndex!)
loadingImage.animationImages?.append(UIImage(named: frameName)!)
}
loadingImage.animationDuration = 1.3
loadingImage.startAnimating()
}
我也试过了var frameName = "loading_000\(formattedIndex)"
,但这似乎没有效果......不确定原因。
答案 0 :(得分:2)
var frameName = "loading_000\(formattedIndex!)"
是唯一有效的选择。
func configureLoadingIcon() {
loadingImage.alpha = 0.0
loadingImage.animationImages = [UIImage]()
var frameName: String
for var i = 0; i < 48; i++ {
let formatter = NSNumberFormatter()
formatter.minimumIntegerDigits = 2
let formattedIndex = formatter.stringFromNumber(i)
var frameName = "loading_000\(formattedIndex!)"
loadingImage.animationImages?.append(UIImage(named: frameName)!)
}
loadingImage.animationDuration = 1.3
loadingImage.startAnimating()
}
答案 1 :(得分:0)
您的代码可能在32位和64位之间有效。 %05d是C / C ++ / Objective-C&#39; int&#39;的格式。 index可能具有类型Int,它是32位或64位。 %05zd应该可以正常工作。
%05d可能会选择64位Int的错误32位,生成一个随机大整数的名称,UIImage(名称:...)返回nil,然后崩溃。