2016-09-19 9 views
0

Swiftを使用して作成されたiOSアプリケーションでFirebaseを使用しています。SetValueが予期したとおりに動作しない

static func createUserRecord(uid: String, user: User){ 
     let userDictionary = user.getJSON() 
     self.usersRef.child(uid).setValue(userDictionary) 
    } 

私は私のアプリをリリースし、私はユーザレコードはもう追加することができませんでしたアプリをリリースした後、アプリの他の全ての機能がいくつかのデータを保存および取得を含め、細かい作業をする前に、このコードはうまく働いていました。誰もこのコードでエラーを見つけられますか?

setValueはパスがない場合でも機能しますか?例えばa/b/のパスがあり、私はa/b/c.child('d').setValue("abcd")と呼んでいます。これは動作しますか?

+0

は、このデータを保存することができるように設定あなたのFirebaseセキュリティルールです:?失敗したあなたの観察者のwithCancel ブロックを実装しなければならないのiOS上で読みを検出する

chickenparm

+0

'setValue()'を呼び出すと、パスがまだ存在しない場合に作成されます。あなたの 'user.getJSON'には、データベース(またはセキュリティルール)に従って無効なものが含まれている可能性が高くなります。これを検出するために補完ブロックを添付したいと思うでしょう:https://firebase.google.com/docs/reference/ios/firebasedatabase/interface_f_i_r_database_reference.html#a1107cae145ab12e1ef58ab9f8713b84d –

+0

@chickenparmはい、両方とも読み書きに当てはまります。写真をストレージにアップロードする際に別の問題がありました(1時間前にうまくいきました)、これが帯域幅の問題になる可能性がありますか?計画をアップグレードすることを検討すべきですか? – iShaalan

答えて

2

setValue()を呼び出すと、パスがまだ存在しない場合は作成されます。

user.getJSON()には、データベース(またはセキュリティルール)に従って無効なものが含まれている可能性が高くなります。

これを検出するには、attach a completion blockが必要です。ここで

はStackOverflowのドキュメントからこれを行うの一例である:

あなた セキュリティルールが操作を拒否するので、あなたが じゃないので、あなたの読み取り操作が動作しないことがなぜ頻繁な理由は、例えば、認証済み(デフォルトでは、認証されたユーザ によってのみデータベースにアクセスできます)。

これらのセキュリティルール違反はコンソール出力で確認できます。しかし、 これを見落とすのは簡単です。独自のコード でそれらを処理し、より目立つようにすることもできます(開発時にJSON、ルールおよびコードが頻繁に変更されるため) が特に便利です。

ref!.child("notAllowed").observe(.value, with: { (snapshot) in 
    print("Got non-existing value: \(snapshot.key)") 
}, withCancel: { (error) in 
    print(error) 
}) 
関連する問題