1
メソッドの一部のinit値を非同期に更新したいのですが、firebase補完を尊重する方法が見つからないので、自分自身で補完しようとしています、しかし、運がない、任意のアイデア?代わりにあなたが観察動的変数とKVOのようなものを使用することができ、初期化コールで非同期操作を行うfirebase関数の独自の補完ハンドラ(カスタムクラスメソッド)
メソッドの一部のinit値を非同期に更新したいのですが、firebase補完を尊重する方法が見つからないので、自分自身で補完しようとしています、しかし、運がない、任意のアイデア?代わりにあなたが観察動的変数とKVOのようなものを使用することができ、初期化コールで非同期操作を行うfirebase関数の独自の補完ハンドラ(カスタムクラスメソッド)
は非常に奇妙である
class POSTDATA {
var comcount : String
var comlike : Int
var post : getitems
init(comcount:String, comlike:Int, post:getitems) {
self.post = post
self.comlike = comlike
self.comcount = comcount
findComCount(){success in}
}
func findComCount(completionHandler: (Bool) ->()) {
let refComCount = Firebase (url: ("https://XXXXXX/COMCOUNTS/" + self.post.postid + "/comcount"))
refComCount.observeEventType(.Value, withBlock: { snap in
if snap.value is NSNull {
self.comcount = "0"
} else {
if snap.value == nil {
self.comcount = "0"
} else {
self.comcount = String(snap.value!)
}
}
completionHandler(true)
})
}
}(次のコードでは、私はcomlikeの値を更新しようとしています) :何
var postDataObject:POSTDATA = POSTDATA("String",0,getitemObj);
override viewDidLoad() {
super.viewDidLoad()
postDataObject.addObserver(self, forKeyPath: "completed", options: NSKeyValueObservingOption, context: nil)
}
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
if (keyPath != nil){
if(keyPath!=="completed"){
//HERE YOU KNOW YOUR OBJECT HAS BEEN UPDATED
}
}
}
deinit {
postDataObject.removeObserver(self, forKeyPath: "completed", context: nil)
}
beautifull、 –
:
は、その後、あなたのViewControllerにあなたはこのような何かをFirebaseがそれらを返すときに値がブロック内で更新されないようにしますか? – Jay
実際、VCでこのメソッドを使用したいので、POSTDATA( "0"、0、post)とPOSTDATA値を取得した直後のデータをlet let dataのように処理しますが、パラメータreturn nil –
この設定は実際にはFirebasesの非同期性を利用しておらず、実際にコードを必要以上に複雑にする可能性があります。新しいデータがあるときにfirebaseにアプリに通知し、それに応じて更新する必要があります。これにより、データの更新が1つのブロックで処理され、firebaseがあなたのアプリケーションの更新を処理しているので、データは常に有効になるので、複数の場所でメソッドを使用する必要がなくなります。複雑なアプリケーションで – Jay