字符串(格式:)在iOS 7中崩溃 - 需要替代方案。线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x10)

时间:2015-05-05 10:44:10

标签: ios string swift

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)",但这似乎没有效果......不确定原因。

2 个答案:

答案 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,然后崩溃。