2016-07-19 10 views
9

Firebaseデータベース内の複数の場所から同時にデータを削除しようとしています。UpdateChildValuesを使用してFirebaseから削除する

Firebase docs状態:

"The simplest way to delete data is to call removeValue on a reference to the location of that data. You can also delete by specifying nil as the value for another write operation such as setValue or updateChildValues. You can use this technique with updateChildValues to delete multiple children in a single API call."

私のコードは、すべての4つのパスが文字列である

let childUpdates = [path1 : nil, 
        path2 : nil, 
        path3 : nil, 
        path4 : nil] 

    ref.updateChildValues(childUpdates) 

ですが、私はエラーを取得:

"Type of expression is ambiguous without more context."

が、私はこの問題が発生したと仮定したいのnilを何か他のもの(Intなど)に置き換えるとエラーが消えるため、nilの値のためです。

updateChildValuesを使用してFirebaseからデータを削除する正しい方法は何ですか? FirebaseのremoveValue()関数と同じように動作します。これを行う理由は、1回の呼び出しで複数の場所から削除できるためです。

答えて

40

に変更するので、ここでの問題は

ref.updateChildValues(childUpdates) 

が必要になることです! nilにすることはできません(つまり、あなたがnilできることはオプションであるANYOBJECTを?使用することはできません)

ただし、ANYOBJECTので、この

let childUpdates = [path1 : NSNull(), 
        path2 : NSNull(), 
        path3 : NSNull(), 
        path4 : NSNull()] 

を行うことができます!現在NSNull()オブジェクト(nilではない)であり、NSNullがnil値であることがFirebaseによって認識されます。

+0

あなたは私の一日を節約 –

+1

ありがとう!これは間違いなくFirebaseのドキュメントに載っている必要があります。 – Crashalot

1

私はこのエラーがあなたが提供した最初の行から来ていると思います。辞書の種類を指定する必要があります。 [!:ANYOBJECT文字列] updateChildValuesへのパラメータ、およびANYOBJECTので

let childUpdates: [String : AnyObject?] = [path1: nil, path2: nil,...] 
+0

残念ながら、それは動作していません。辞書の予想される型は[NSObject:AnyObject]です。ディクショナリがその型でない場合、updateChildValues関数はエラーを返します。私たちはNSObjectsへのパスを変更しようとしましたが、それでもAnyObject?のnil値に不満があります。私たちは価値を置くことができないように思えますが、文書ではわれわれが理解できなかった方法があると言います。 –

+0

空の文字列 '' 'を使うと、Firebaseはそれを削除します。それを試してください。 – rigdonmr

+1

ちょうど空の文字列にパスの値を変更する –

関連する問題