2015-05-05 125 views
2

String(format :)方法在iOS 7中崩溃我的应用程序,但它在iOS 8中正常工作。有什么我可以用来在这里获得相同的效果在两个作品?字符串(格式:)在iOS 7中崩溃 - 需要替代品。线程1:EXC_BAD_ACCESS(code = 1,address = 0x10)

我得到的错误信息是: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

你是否100%确定'String(format:...)'是罪魁祸首?尝试删除所有其他代码,特别是'UIImage(named:frameName)!' - 它是否仍然崩溃?它会在模拟器还是设备上崩溃?哪些设备? –

+0

(当然,你可以使用NSNumberFormatter来代替,但是我还没有明白为什么你的代码会在这个时候崩溃。) –

+0

任何iOS 7.1模拟器。我试过评论除for循环以外的所有内容,但它仍然崩溃。 –

回答

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() 
} 
+0

我一直在使用'String(format)'为Web服务构建肥皂消息的完全相同的场景挣扎。我也改变了你现在使用'\()'和它的工作方式。这必须是我想象的一些Swift错误。我的例子比你在这里有更复杂的一点,但仅仅是因为我喜欢10个字符串的值。疯。 – AtheistP3ace

0

您的代码有可能在32位和64位之间工作。 %05d是C/C++/Objective-C'int'的格式。索引可能具有类型为32位或64位的Int。 %05zd应该可以正常工作。

%05d可能会选取64位Int的错误32位,产生一个带有随机大整数的名称,UIImage(named:...)返回nil,并且出现崩溃。

+0

这就是我的想法,但我尝试了iPhone 5(32位)和iPhone 5s(64位)模拟器中的代码,并且“%05d”都正确地工作了两次。奇怪... –

+0

我要试着去弄个iOS 7.1设备,看看它是否只是一个模拟器问题。添加zd没有帮助。 –

相关问题