EXC_BAD_ACESS崩溃xcode

时间:2016-03-19 02:32:51

标签: ios xcode

我遇到了这次崩溃:link  在我的应用程序中,我做了很多搜索,但我没有找到如何解决它。  我还启用了Zombies对象& xcode分析器,但没有成功。

这是我的代码:

import UIKit

class CameraViewController: UIViewController{


    @IBOutlet weak var playerContainer: UIView!
    @IBOutlet weak var imageView: UIImageView!
    @IBOutlet weak var loading: UIActivityIndicatorView!

    var device : GTLUserendpointGeneralCamera!
    var myfoxCam : CloseliCameraDevice!
    var retryToPlayCount = 0

    override func viewDidLoad() {
        super.viewDidLoad()

        NSNotificationCenter.defaultCenter().addObserver(self,selector: "playerStatusChanged:",name: CameraPlayerStatusChangedNotification,object: nil)

        NSNotificationCenter.defaultCenter().addObserver(self,selector: "playerStoppedDispose:",name: CameraPlayerStoppedNotification,object: nil)
    }

    override func viewDidAppear(animated: Bool) {
        if(device.brand == "myfox"){
            showLive()
        }
    }

    override func viewWillDisappear(animated: Bool) {
        MyFoxManager.sharedInstance.destroyPlayer()

    }

    deinit {
        NSNotificationCenter.defaultCenter().removeObserver(self)
    }

    func showLive(){
        loading.startAnimating()
        MyFoxManager.sharedInstance.showLive(myfoxCam , image: self.imageView)
    }

    func playerStatusChanged(notification: NSNotification){
        let waiting = notification.userInfo!["NSLocalizedDescription"] as! Bool
        dispatch_async(dispatch_get_main_queue()) { [weak self] in
            if let strongSelf = self {
                if(waiting){
                    strongSelf.loading.startAnimating()
                }else{
                    strongSelf.retryToPlayCount = 0
                    strongSelf.loading.stopAnimating()
                }
            }
        }
    }

    func playerStoppedDispose(notification: NSNotification){
        let code = notification.userInfo!["NSLocalizedFailureReason"] as! Int
        dispatch_async(dispatch_get_main_queue()) { [weak self] in
            if let strongSelf = self {
                if(code & strongSelf.retryToPlayCount < 4){
                    strongSelf.retryToPlayCount = strongSelf.retryToPlayCount + 1
                    strongSelf.performSelector("showLive", withObject: nil, afterDelay: 2.0)
                }
            }
        }
    }
}

import UIKit
import Foundation
import CoreBluetooth

class MyFoxManager: NSObject {

    static let sharedInstance = MyFoxManager()
    var closeSDK : CloseliSDK!
    var login = false

    private override init() {
        closeSDK = CloseliSDK(productKey: MyFoxAppId, withPassword: MyFoxAppSecret, serverType: "us")
    }

    func getCamera(device: GTLUserendpointGeneralCamera) -> CloseliCameraDevice? {
        if(!login){
            do {
                try closeSDK.loginWithToken(device.appUrl, withAccount: device.url)
                login = true
            }catch{
                return nil
            }
        }

        do {
            let myfoxCameras = try closeSDK.getCameraListError()
            let myfoxCamera = myfoxCameras.filter{$0.deviceUUID == device.idDevice}
            return myfoxCamera[0] as? CloseliCameraDevice
        }catch {
            return nil
        }
    }

    func showLive(myfoxCam: CloseliCameraDevice, image: UIImageView){
        closeSDK.preparetoLivePreview(myfoxCam , withUI: image)
    }

    func destroyPlayer(){
        closeSDK.destoryPlayer()
    }
}

来自第三方库的通知定义:

/**
    Notification for live preview status changing.
 NOTICE: The notification may not be sent by CloseliSDK, so please fill parameter with sender to nil when adding observer
    @param userInfo in NSNotification is a NSDictionary, value for NSLocalizedDescriptionKey is a NSNumber, YES means live preview is buffering, NO means live preview begin.
    BOOL bWaiting = [[[notification userInfo] valueForKey:NSLocalizedDescriptionKey] boolValue];
 */
extern NSString *const CameraPlayerStatusChangedNotification;

/**
 Notification for player stopped.
 NOTICE: The notification may not be sent by CloseliSDK, so please fill parameter with sender to nil when adding observer
    @param userInfo in NSNotification is a NSDictionary, value for NSLocalizedFailureReasonErrorKey is a NSNumber, represent the reason why it stopped, normally 0.
    long stopReason = [[[notification userInfo] valueForKey:NSLocalizedFailureReasonErrorKey] longValue];
    stopReason: 0x3261-means there is another client playing in p2p mode.

*/
extern NSString *const CameraPlayerStoppedNotification;

有什么想法吗?

提前致谢

0 个答案:

没有答案