2016-09-13 2 views
0

라고 : 지속성을 사용하는 경우중포 기지 아이폰 OS SDK`setValue` 완료는 inconsistantly

func setValue(value: AnyObject?, withCompletionBlock block: (NSError?, FIRDatabaseReference) -> Void)

가 중포 기지의 iOS SDK의 일부로 완료 블록이 일관성없이 전화를받을 것입니다.

네트워크 연결이 없으면 데이터를 서버로 전송할 때 완료를 호출하지만 네트워크 연결이 없으면 완료를 호출해서는 안된다는 것을 알고 있습니다. 그러나 생성 된 레코드를 볼 수는 있습니다. firebase 콘솔과 호출 된 완료 블록이 여전히 일관성이 없습니다.

persistanceEnabled을 해제하면 호출이 예상대로 작동합니다.

내 방법입니다. 완료 차단합니다 - 심판은 FIRDatabaseReference하고 json는 JSON

func lightSave(completion: FBModelUpdateCompletion? = nil) { 
    print("Light Saving \(ref)") 
    ref.setValue(json, withCompletionBlock: { (error, result) in 
     print("finished saving") 
     if let error = error { 
      print(error.localizedDescription) 
     } 
     completion?(error: error, object: self) 
    }) 
} 

답변

0

로 개체 표현입니다 사실이 아니다

"나는 네트워크 연결이없는 경우 완료가 호출되지 것을 실현" 또한은 네트워크에 연결되어 있지 않고 persistenceEnabled이 켜져있을 때 호출됩니다.

여기서 이론적 근거는 Firebase 데이터베이스가 앱의 진정한 데이터 소스가되도록해야하며, 연결되어 있는지 여부에 대해 걱정할 필요가없는 경우 데이터베이스 업데이트에 의존해야한다는 것입니다 직접 연결하거나 관리하는 경우, 상황이 더러워집니다.

데이터베이스에 연결되어 있지 않지만 persistenceEnabled가 켜져있는 경우 Firebase는 온라인 데이터베이스 자체가 업데이트 된 것처럼 나중에 "내 데이터를 로컬 캐시로 업데이트하려고합니다"라는 호출을 호출합니다 , Firebase 참조를 정확한 데이터 소스로 계속 취급 할 수 있습니다.

관련 문제