2016-12-01 60 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