2017-03-09 39 views
1

我正在使用Firebase侦听器更新远程摄像头的状态值。一旦我在照相机生命周期中循环播放,我想要删除听众,以便我的相机不会重新开始并继续拍摄视频。迅速Firebase删除观察员不删除

以下是我迄今所做的基于SO建议:

1)添加FIRDatabaseHandle并呼吁removeObserver(withHandle:手柄)/没有运气

2)简单的称为removeAllObservers()从根参考你下面看到的。

struct CameraActions { 

let db = DataService.ds.db // this comes from a singleton used to for other Firebase calls 
let uid = DataService.ds.curUser?.uid 

var cameraRef:FIRDatabaseReference! 

mutating func addCameraListener(cameraNum num:String, complete:@escaping(CameraStatus)->Void){ 
    cameraRef = db.child("camera").child(num).child("status") 
    cameraRef.observe(.value, with: { 
     snap in 
     if let status = snap.value as? Int { 

      switch status { 
      case 0: complete(.ready) 
      case 2: complete(.isRecording) 
      case 4: complete(.hasStopped) 
      case 5: complete(.problem) 
      default: print("App is waiting on camera") 
      } 
     } 
    }) 
} 

func cameraHasFinishedRecording(cameraNum num: String) { 
    cameraRef.removeAllObservers() // latest attempt here 
    db.child("camera").child(num).child("status").setValue(0) // this still triggers database call 

} 

在此先感谢您的任何帮助。

+0

你可以检查多少次你调用'addCameraListener' func –

+0

你是否想在**录制过程中检查db **中的所有值更改?或者只是一次录制开始? – Rikh

+0

我的VC调用ViewDidLoad中的监听器(所谓的一次设置)。根据来自侦听器的返回值的状态加载各种视图。是的,在录制过程中,我确实检查了数值的变化,这些变化在上面未列出的funcs中进行浓缩。 – Avenious

回答

0

Firebase的工作方式与广告完全相同。观察员的撤除工作正在进行,但另一位应该是单一观察员的观察员正在射击。感谢您的宝贵意见和遗憾。

干杯!