填充圖像數據陣列時,我節省UIImages磁盤:崩潰從磁盤
let sketchData: NSData = UIImagePNGRepresentation(sketch)
let sketchPath: String = NSHomeDirectory().stringByAppendingPathComponent("Documents/Sketch\(indexNumber).png")
sketchData.writeToFile(sketchPath, atomically: true)
然後,我想,重新使用他們的數組:
if lengthOfSketchArray > 0 {
for indexNumber in 0...lengthOfSketchArray {
let sketchPath: String = NSHomeDirectory().stringByAppendingPathComponent("Documents/Sketch\(indexNumber).png")
let image = UIImage(contentsOfFile: sketchPath)
slideSketchArray[indexNumber] = image!
}
}
在最後行,我得到「致命的錯誤:意外地發現零,同時解開一個可選值」。
我試了很多變化,但每一個崩潰。我究竟做錯了什麼?
UPDATE
它的工作吧!我根據評論改變了很多東西,包括使用 NSSearchPathForDirectoriesInDomains
,以及不再將圖像保存在數組中。現在我正在保存圖像路徑,並在需要時從磁盤加載圖像。
func saveImageToDisk() {
let sketchData: NSData = UIImagePNGRepresentation(sketch)
let destinationFolder: String = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
let sketchPath: String = "\(destinationFolder)\(currentProjectID).png"
sketchData.writeToFile(sketchPath, atomically: true)
let currentMetadata: [String: String] = [
"sketchpath": sketchPath
]
allMetadata.append(currentMetadata)
defaults.setObject(allMetadata, forKey: "allMetadata")
func loadImageAtIndex(index: Int) -> UIImage {
let sketchPath: String = allMetadata[index].objectForKey("sketchpath") as String
let image = UIImage(contentsOfFile: sketchPath)
return image!
}
你可以在循環的每次迭代中記錄'sketchPath'併發布結果嗎? – NobodyNada 2015-02-11 23:23:09
您正在執行'for indexNumber in 0 ... lengthOfSketchArray'。你的意思是......「而不是」......「? – Rob 2015-02-11 23:24:27
您不應該使用'NSHomeDirectory'並追加到它來查找文檔目錄。相反,您應該使用'NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)'或'NSFileManager.URLsForDirectory(NSDocumentDirectory,domainMask:.UserDomainMask)'在iOS 8中,Documents目錄不再與應用程序目錄位於同一位置。 – 2015-02-11 23:37:44