2015-09-14 95 views
0

感謝您檢查我的帖子。無法調試EXC BAD ACCESS代碼1

因此,行image!.drawInRect(rect!),我得到EXC_BAD_ACCESS代碼1錯誤,我無法弄清楚我的生活。我在運行方案中啓用了殭屍,並沒有打印出來(也許我也做錯了?),我有println()看起來像我所有的變量,沒有什麼是零。

我想說明的是,這段代碼可以工作兩次,然後大部分時間第三次調用失敗。在我的應用程序中,您拍攝一張照片,然後您需要編輯照片(當調用此功能時)。當我回到我的相機拍攝照片並返回進行編輯(第三次)時,出現此錯誤。

此外,這種方法被稱爲在viewDidAppear()

任何幫助理解。我即將把我的頭髮拉出來!

 var rect: CGRect? 
    var image: UIImage? 
func convertCIImageToUIImage(cIImage: CIImage) -> UIImage { 

    println(cIImage) 

    let size: CGSize = filteredImageView.inputImage.size 
    println(filteredImageView.inputImage.size) 

    UIGraphicsBeginImageContext(size) 

    rect = CGRect(origin: CGPointZero, size: size) 
    image = UIImage(CIImage: filteredImageView.filter.outputImage) 

    println(UIGraphicsGetCurrentContext()) 
    println("size: \(size)") 
    printAllObjects() 
    println() 

    image!.drawInRect(rect!) 
    let newImage = UIGraphicsGetImageFromCurrentImageContext() 

    UIGraphicsEndImageContext() 

    image = nil 
    rect = nil 

    let finalImage = UIImage(CGImage: newImage.CGImage!, scale: 1.0, orientation: UIImageOrientation.Right) 
    return finalImage! 
} 

回答

3

解決了!

我的功能是過度設計的遠景。一個簡單的return UIImage(CIImage: cIImage)!解決了我的問題,並取代了上面的所有代碼。這就是我在線複製代碼所得到的結果!學過的知識。謝謝您的幫助!

2

由於該行有問題,可能會解壓兩個可選項,也許您會解開一個零(它會產生錯誤)。嘗試使用可選的綁定安全解包:

if let safeRect = CGRect(origin: CGPointZero, size: size), 
    let safeImage = UIImage(CIImage: filteredImageView.filter.outputImage) 
{ 
    safeImage.drawInRect(safeRect) 
} 

這樣,如果任一CGRect實例或UIImage實例的構造失敗,在大括號行不會被執行。

+0

嘿謝謝你的回覆。所以把我的評論註釋掉了,換上你的。同樣的事情正在發生。它在'safeImage.drawInRect(safeRect)'上失敗。很奇怪。任何其他想法? – justColbs

+0

在Playground中粘貼你的代碼給了我很多有關'filteredImageView'的錯誤。它是什麼? – MustangXY

+0

這是一個自定義類。我解決了這個問題。在下面檢查。 – justColbs