1回の呼び出しでFirebaseの複数のタイプのノードを更新する方法(Swift)

エリック

会話ノードがあり、内部にはdisplayMessage、conversationName、imageUrlなどの単純なサブノードがありますが、senderID、テキスト、タイムスタンプなどのデータを使用して会話内で送信されるすべてのメッセージを説明する追加のサブノードを保持するメッセージノードもあります。メッセージの送信ボタンが押されたときに、メッセージノードを追加のメッセージサブノードと、displayMessageやlastMessageTimeなどの単純なサブノードで更新しようとしています。ただし、私が持っているコードは、「メッセージ」内のすべてのノードを新しいメッセージノードだけに完全に置き換えます。

 fileprivate func sendMessage(uid: String, convoId: String) {


    let ref = Database.database().reference().child("conversations").child(convoId)

    let messageTime = NSDate().timeIntervalSince1970
    let messageInfo : [String:Any] = ["text":containerView.chatTextView.text, "senderId":uid, "timestamp": messageTime]
    let randomMessageId = NSUUID().uuidString
    let messageDict = [randomMessageId:messageInfo]

    let values = ["displayMessage":containerView.chatTextView.text, "lastMessageTime": messageTime, "messages":messageDict] as [String : Any]

    ref.updateChildValues(values) { (error, ref) in

        if error != nil {
            print (error as Any)
            return
        }

        self.containerView.clearChatTextField()

                }

}

データベース構造

フランク・ヴァン・パッフェレン

を使用するupdateChildValuesと、Firebaseサーバーはディクショナリ内の各キーをループsetValueし、指定した値で各キーを呼び出します。

これは、辞書の最上位でのみマージされることを意味します。各子で、既存の値を置き換えます。

JSONの下位レベルで更新/追加を実行する場合は、それらの子へのパスを辞書のキーにエンコードする必要があります。したがってmessages、会話子に新しいメッセージを追加するには、新しいメッセージのパスをキーとして持つ必要があります。すでに独自のメッセージIDを生成しているので、必要なものはすべて、辞書の値ではなくキーに含めます。

let randomMessageId = NSUUID().uuidString

let values = ["displayMessage": containerView.chatTextView.text,
              "lastMessageTime": messageTime, 
              "messages/"+randomMessageId: messageInfo] as [String: Any]

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

1回の呼び出しで複数のテンプレート関数を呼び出す方法は?

分類Dev

Java APIを使用して1回の呼び出しで複数のファイルをGoogle Cloud Storageにアップロードする方法

分類Dev

1回のプロセス呼び出しで複数のファイルをプリンターに送信する方法

分類Dev

1回の呼び出しで複数のパスを更新する

分類Dev

1回の呼び出しで複数のajax呼び出し関数を実行する方法

分類Dev

1回のajax呼び出しで複数の入力フィールドデータをロードする方法は?

分類Dev

AngularJS-1回のAJAX呼び出しで複数のウィジェットのデータを取得する

分類Dev

hiredisを使用して1回の呼び出しで複数のレコードを送信する

分類Dev

luaL_loadbufferは1回の呼び出しで複数のファイルをロードできますか?

分類Dev

1回の呼び出しで複数のターゲットを使用するMakefileルール

分類Dev

1回の呼び出しで異なるドキュメント内の複数のサブドキュメントを更新する方法をマングース-MERNスタック

分類Dev

GraphQLでヘッドレスChromeインスタンスを作成する関数への複数の呼び出しをグループ化する方法

分類Dev

1回の置換呼び出しで複数の文字を置換する

分類Dev

1回の呼び出しで複数のmysqlクエリを実行する

分類Dev

Shopify API:1回の呼び出しでIDを介して複数のレコードを取得します

分類Dev

Typescript:複数のタイプでオーバーロードを呼び出す

分類Dev

1回のDB呼び出しで複数のドキュメントを置き換える方法

分類Dev

オブザーバブルを使用して、1回のhttp呼び出しで複数のコンポーネントプロパティを更新します

分類Dev

1回のclassmethod呼び出しでクラスの複数のインスタンスをインスタンス化することは可能ですか?

分類Dev

Swift 3.0 でこのタイプのパラメータをサーバー呼び出しに送信する方法

分類Dev

VB6-1回の呼び出しで複数のSQLクエリを実行する方法

分類Dev

コンストラクター全体で1回の呼び出しで、クラスの複数のコンストラクターから共通の静的ユーティリティメソッドを呼び出す方法

分類Dev

複数のAPI呼び出し時に応答インターセプターを1回だけ実行する

分類Dev

1回のメソッド呼び出しで複数のイベントのサブスクライブを解除することは可能ですか?

分類Dev

ノードjsの1つの関数内で複数の関数を呼び出す

分類Dev

1つのajaxで複数のインスタンスを送信し、laravelでコントローラー呼び出しを受信する方法

分類Dev

異なるパラメーターで複数のメソッド呼び出しを確認する方法

分類Dev

1回のAJAX呼び出しで2つのdivをロードする

分類Dev

1回の呼び出しでODEの導関数が呼び出された回数を見つける方法。

Related 関連記事

  1. 1

    1回の呼び出しで複数のテンプレート関数を呼び出す方法は?

  2. 2

    Java APIを使用して1回の呼び出しで複数のファイルをGoogle Cloud Storageにアップロードする方法

  3. 3

    1回のプロセス呼び出しで複数のファイルをプリンターに送信する方法

  4. 4

    1回の呼び出しで複数のパスを更新する

  5. 5

    1回の呼び出しで複数のajax呼び出し関数を実行する方法

  6. 6

    1回のajax呼び出しで複数の入力フィールドデータをロードする方法は?

  7. 7

    AngularJS-1回のAJAX呼び出しで複数のウィジェットのデータを取得する

  8. 8

    hiredisを使用して1回の呼び出しで複数のレコードを送信する

  9. 9

    luaL_loadbufferは1回の呼び出しで複数のファイルをロードできますか?

  10. 10

    1回の呼び出しで複数のターゲットを使用するMakefileルール

  11. 11

    1回の呼び出しで異なるドキュメント内の複数のサブドキュメントを更新する方法をマングース-MERNスタック

  12. 12

    GraphQLでヘッドレスChromeインスタンスを作成する関数への複数の呼び出しをグループ化する方法

  13. 13

    1回の置換呼び出しで複数の文字を置換する

  14. 14

    1回の呼び出しで複数のmysqlクエリを実行する

  15. 15

    Shopify API:1回の呼び出しでIDを介して複数のレコードを取得します

  16. 16

    Typescript:複数のタイプでオーバーロードを呼び出す

  17. 17

    1回のDB呼び出しで複数のドキュメントを置き換える方法

  18. 18

    オブザーバブルを使用して、1回のhttp呼び出しで複数のコンポーネントプロパティを更新します

  19. 19

    1回のclassmethod呼び出しでクラスの複数のインスタンスをインスタンス化することは可能ですか?

  20. 20

    Swift 3.0 でこのタイプのパラメータをサーバー呼び出しに送信する方法

  21. 21

    VB6-1回の呼び出しで複数のSQLクエリを実行する方法

  22. 22

    コンストラクター全体で1回の呼び出しで、クラスの複数のコンストラクターから共通の静的ユーティリティメソッドを呼び出す方法

  23. 23

    複数のAPI呼び出し時に応答インターセプターを1回だけ実行する

  24. 24

    1回のメソッド呼び出しで複数のイベントのサブスクライブを解除することは可能ですか?

  25. 25

    ノードjsの1つの関数内で複数の関数を呼び出す

  26. 26

    1つのajaxで複数のインスタンスを送信し、laravelでコントローラー呼び出しを受信する方法

  27. 27

    異なるパラメーターで複数のメソッド呼び出しを確認する方法

  28. 28

    1回のAJAX呼び出しで2つのdivをロードする

  29. 29

    1回の呼び出しでODEの導関数が呼び出された回数を見つける方法。

ホットタグ

アーカイブ