2015-05-05 33 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沒有幫助。 –

相關問題