2014-11-03 99 views
1

我是編程新手。我將用Apple新編程語言Swift學習iOS應用程序開發。 而我按照這個網站(https://developer.apple.com/swift/blog/?id=16)開始。
我將視頻中的代碼複製到我的Xcode項目中。當我在iOS 8.1 iOS模擬器中運行應用程序時,任何事情都很好。
但我在選擇iOS 7.1 iOS模擬器時出現異常。
而我把應用程序放到我的iPhone 5S(iOS 7.1.2)中,它被破壞。libC++ abi.dylib:以iOS 7.1上的NSException類型的未捕獲異常終止

下面是我從視頻複製代碼:

import UIKit 
class ViewController: UIViewController { 
    @IBOutlet weak var photoImageView: UIImageView! 
    let context = CIContext(options: nil) 

    @IBAction func applyFilter(sender: AnyObject) { 
     let inputImage = CIImage(image: photoImageView.image) 

     let randomColor = [kCIInputAngleKey: (Double(arc4random_uniform(314))/100)] 
     let filteredImage = inputImage.imageByApplyingFilter("CIHueAdjust",withInputParameters: randomColor) 
     let renderedImage = context.createCGImage(filteredImage, fromRect: filteredImage.extent()) 

     photoImageView.image = UIImage(CGImage: renderedImage) 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 
} 

以下是我從控制檯得到:

2014-11-03 16:17:30.645 njnj[2748:60b] -[CIImage imageByApplyingFilter:withInputParameters:]: unrecognized selector sent to instance 0x7fe4e3d165e0 
2014-11-03 16:17:30.649 njnj[2748:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[CIImage imageByApplyingFilter:withInputParameters:]: unrecognized selector sent to instance 0x7fe4e3d165e0' 
*** First throw call stack: 
(
    0 CoreFoundation      0x0000000106c8b495 __exceptionPreprocess + 165 
    1 libobjc.A.dylib      0x000000010852799e objc_exception_throw + 43 
    2 CoreFoundation      0x0000000106d1c65d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205 
    3 CoreFoundation      0x0000000106c7cd8d ___forwarding___ + 973 
    4 CoreFoundation      0x0000000106c7c938 _CF_forwarding_prep_0 + 120 
    5 njnj        0x0000000106b934a0 _TFC4njnj14ViewController11applyFilterfS0_FPSs9AnyObject_T_ + 3648 
    6 njnj        0x0000000106b93a66 _TToFC4njnj14ViewController11applyFilterfS0_FPSs9AnyObject_T_ + 54 
    7 UIKit        0x000000010753af06 -[UIApplication sendAction:to:from:forEvent:] + 80 
    8 UIKit        0x000000010753af06 -[UIApplication sendAction:to:from:forEvent:] + 80 
    9 UIKit        0x000000010753aeb4 -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 17 
    10 UIKit        0x0000000107617880 -[UIControl _sendActionsForEvents:withEvent:] + 203 
    11 UIKit        0x0000000107616dc0 -[UIControl touchesEnded:withEvent:] + 530 
    12 UIKit        0x0000000107571d05 -[UIWindow _sendTouchesForEvent:] + 701 
    13 UIKit        0x00000001075726e4 -[UIWindow sendEvent:] + 925 
    14 UIKit        0x000000010754a29a -[UIApplication sendEvent:] + 211 
    15 UIKit        0x0000000107537aed _UIApplicationHandleEventQueue + 9579 
    16 CoreFoundation      0x0000000106c1ad21 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17 
    17 CoreFoundation      0x0000000106c1a5f2 __CFRunLoopDoSources0 + 242 
    18 CoreFoundation      0x0000000106c3646f __CFRunLoopRun + 767 
    19 CoreFoundation      0x0000000106c35d83 CFRunLoopRunSpecific + 467 
    20 GraphicsServices     0x000000010baf2f04 GSEventRunModal + 161 
    21 UIKit        0x0000000107539e33 UIApplicationMain + 1010 
    22 njnj        0x0000000106b9582e top_level_code + 78 
    23 njnj        0x0000000106b9586a main + 42 
    24 libdyld.dylib      0x0000000108ee55fd start + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
(lldb) 

我希望有人能幫助我解決這個問題。

+0

崩潰日誌抱怨'imageByApplyingFilter:withInputParameters:'。您是否在文檔中查找了該功能?根據https://developer.apple.com/library/ios/releasenotes/General/iOS80APIDiffs/frameworks/CoreImage.html,它在*** 8.0中增加了***。 – 2014-11-03 09:07:38

+0

@MartinR,非常感謝。我只是谷歌的「imageByApplyingFilter iOS 7.1」,但我沒有發現我需要的東西。非常感謝你。 – 2014-11-03 09:12:43

+0

爲什麼不確定你的應用程序的'Deployment Target'適合你希望你的應用運行的設備/模擬器的版本? – findall 2014-11-03 11:12:40

回答

0

通常「無法識別的選擇器發送到實例」(由-doesNotRecognizeSelector產生)表示內存管理問題,通常是仍然引用某處的對象的過度釋放。

我建議你運行帶內存調試的調試版本來分類你的應用程序的內存問題。我建議你通過最新版本的Xcode使用ASan。如果這不是一個選項,你可以使用malloc歷史跟守衛malloc,scribble和NSZombies。

+0

殭屍有助於調試BAD_ACCESS。無法識別的選擇器意味着找不到您要調用的方法的簽名。在Xcode中這是一個奇怪的事情,當二進制文件(如.framework)未鏈接,嵌入或複製時,運行時會顯示此錯誤。特別是當該方法屬於一個類別時。 – 2016-09-17 21:54:50

+0

殭屍有助於調試導致BAD_ACCESS的過度版本,因爲它保持活動的對象來捕獲這些訪問。它還有助於調試導致-doesNotRecognizeSelector:的過度版本。當一個對象被釋放(仍然存在引用)時,可以在該地址創建另一個對象,然後通過對釋放對象的引用進行未來訪問將觸發-doesNotRecognizeSelector :. – 2016-09-18 17:16:25

+0

我同意你的答案。你有一個或兩個示例程序來演示這兩種類型的殭屍嗎?或者也許是一個教程的鏈接?謝謝 – 2016-09-23 03:53:17

相關問題