2016-12-01 58 views
0

有時我得到一個EXC_BAD_ACCESS錯誤在此代碼:對於循環的結果有時EXC_BAD_ACCESS

internal func downloadMultiple(files: NSMutableArray, remoteBaseUrl: NSURL, completion: (result: Int)->()) -> Void { 
    self.filesToDownload = files 
    self.cb = completion 

    for item in files { // this line gets marked, but why this line? 
     print("file ", item["file"] as! String) 
     self.download(remoteBaseUrl.URLByAppendingPathComponent(item["file"] as! String)!) 
    } 
} 

但它只是有時會發生,任何想法如何找出是什麼原因造成的?

+2

'項目[「文件」]結合'是零? – shallowThought

回答

2

你所得到的崩潰,因爲item[file]nil和你正在使用武力展開,一起去選購這樣

for item in files { 
    // this line gets marked, but why this line? 
    if let file = item["file"] as String { 
     print("file ", file) 
     self.download(remoteBaseUrl.URLByAppendingPathComponent(file) 
    } else { 
     print("file not available") 
    } 

} 
+1

將'!'強制解包操作符想象成「crash if nil」操作符。這就是它的作用。如果你不是100%確定你正在展開的東西永遠不會是零,那就不要使用它。 –

+0

在我的理論中,它永遠不會是零,但是這會創建一個引用:'self.filesToDownload = files',並且一旦它們下載並且'NSMutableArray'不能有空洞,我就從它移除項目,這就是爲什麼它們得到'nil'。是我的新理論:)但需要更多地測試它。 – mnewmedia