2017-07-20 10 views
0

Description、Location、Picを同じAutoId to Firebaseにロードしようとしています。最初にPicを保存してからURLを取得して、そのURLをPic値に追加する必要があります。私はDescriptionとLocationを最初にアップロードしようとしましたが、Picを空白のままにして戻ってPic URLを追加しましたが、autoIDのキー値が機能していないようです。別のノードへのFirebaseのロードiOS Swift

Pic URLを別のchildAutoIdに入れ続けます。同じ子ノードに格納する方法を教えてください。

初期機能は、ピックURL

func savePicPost(){ 
    //Store the image in storage 
    let imageName = NSUUID().uuidString 
    let storedImage = storageRef.child("PostPics/").child(imageName) 

    if let uploadData = UIImagePNGRepresentation(self.postImage.image!) { 
     storedImage.putData(uploadData, metadata: nil, completion: { (metadata, error) in 

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

      if let picPostURL = metadata?.downloadURL()?.absoluteString { 
       self.ref.child("Posts").child(self.key).updateChildValues(["Pic" : picPostURL], withCompletionBlock: { (error, ref) in 

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

       }) 
      } 

     }) 
    } 
} 

をバックだけで作成したIDへ行くしようとし、ストレージに写真を保存した後AUTOIDノード

@IBAction func postToWall(_ sender: Any) { 
    let location : String = locationTextField.text! 
    let description : String = descriptionTextField.text! 


    self.ref.child("Posts").childByAutoId().setValue(["Location" : location, "Description" : description, "Pic" : ""]) 

    let newRef = ref.child("Posts").childByAutoId() 
    print(newRef) 
    key = newRef.key 
    print(key) 
    savePicPost() 
} 

を作成し、保存しますさまざまなIDで保存する方法は次のとおりです Firebase Screenshot

私は近くにいる、私はそれを感じることができます。私は思うが、何かが私の重要な価値を持っているはずです。どんな助けでも大歓迎です。

ありがとうございました

答えて

1

明快でシンプルです。値を設定するときに使用したものではなく、完全に新しい子をkeyに保存しています。

// This creates a new child 
let newRef = ref.child("Posts").childByAutoId() 

代わりに、あなたのchildByAutoIdへの参照を保持し続けると、あなたのsavePicPost()にそれを渡します。そこにあなたの写真のURLを格納するために使用することができます。すなわち

let post = self.ref.child("Posts").childByAutoId() 
post.setValue(["Location" : location, "Description" : description, "Pic" : ""]) 

// call your method like so 
func savePicPost(into: post) 

// use this ref to update picture URL 
post.updateChildValues(["Pic" : picPostURL]) 

私はそれが役に立ちそうです。

+0

うーん、大丈夫。私はそれを理解していませんが、私はそれを試してみて、それを理解しようとします。応答のためにありがとう –

+0

'childByAutoId()'は基本的に 'FirebaseDatabaseReference'を返します。後で再利用したいので、その参照を保持し、後で' savePicPost() 'で使用することができます。 Firebaseプロジェクトのセットアップが一切ないので、完全な正確なコードを投稿できませんでした。 –

0

はい私は今参照してください。ありがとうございました。古いIDを使用する代わりに新しいIDを作成していました。ここで私のコードはどのように見えるのですか、私は削除したものをコメントアウトしました。私は実際にそれを動作させるためにいくつかを削除しました。それはおかしい。おかげ

@IBAction func postToWall(_ sender: Any) { 
    let location : String = locationTextField.text! 
    let description : String = descriptionTextField.text! 

//ましょうnewRef = ref.child( "投稿")。childByAutoId() newRef = self.ref.child( "投稿")しましょう。childByAutoId()

//自己。。.ref.child( "投稿")childByAutoId()のsetValue([ "場所":位置、 "説明":記述、 "ピック": ""])

newRef.setValue(["Location" : location, "Description" : description, "Pic" : ""]) 


    print(newRef) 
    key = newRef.key 
    print(key) 
    savePicPost() 

//プリント(キー)

} 
関連する問題