2017-08-04 20 views
0

私が作成したアプリケーションはfirebaseからデータを読み込むことができます。しかし、私はそれにデータを書き込もうとすると、動作していないようです。私は ".write"が本当に設定されていることを確認するために私のルールをチェックしましたが、何もポップアップしていません。 ref?.child(email).child("events").setValue("Test")Firebaseは読むことができますが、私は投稿することができません

メールの変数が値を持っている、それは私も「テスト」のための電子メールを代入しようとしたことで奇妙なものではありませんでした二重チェックするのに、次のようにfirebaseするイベントを記述しようとすると

。他にどこが間違っているのか分かりません。どんな助けも神様です!参照用

全コード:

// 
// NewEventToCreateVC.swift 
// WSUStudentEvents 
// 
// Created by Colin Warn on 7/31/17. 
// Copyright © 2017 Colin Warn. All rights reserved. 
// 

import UIKit 
import FirebaseDatabase 
import Firebase 

class NewEventToCreateVC: UIViewController { 
    var eventToCreate: UserEvent? 



    @IBOutlet weak var titleOutlet: UILabel! 
    @IBOutlet weak var startTimeOutlet: UILabel! 
    @IBOutlet weak var endTimeOutlet: UILabel! 
    @IBOutlet weak var eventTypeOutlet: UILabel! 
    @IBOutlet weak var locationOutlet: UILabel! 
    @IBOutlet weak var descriptionOutlet: UITextView! 
    @IBOutlet weak var passwordOutlet: UILabel! 

    let defaults = UserDefaults.standard 

    var ref: DatabaseReference? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     ref = DatabaseReference().database.reference() 

     let formatter = DateFormatter() 
     formatter.dateStyle = .short 
     formatter.timeStyle = .short 
     var startDateString = "" 
     var endDateString = "" 
     if let startTime = eventToCreate?.startTime, let endTime = eventToCreate?.endTime { 
      startDateString = formatter.string(from: startTime) 
      endDateString = formatter.string(from: endTime) 
     } 


     titleOutlet.text = eventToCreate?.eventName 
     startTimeOutlet.text = startDateString 
     endTimeOutlet.text = endDateString 
     eventTypeOutlet.text = eventToCreate?.eventType 
     locationOutlet.text = eventToCreate?.eventLocation 
     descriptionOutlet.text = eventToCreate?.description 
     if let password = eventToCreate?.password { 
      if password == "" { 
       passwordOutlet.text = "(no password)" 
      } else { 
       passwordOutlet.text = "Password: \(password)" 
      } 

     } 


     // Do any additional setup after loading the view. 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    override func viewDidAppear(_ animated: Bool) { 
     print("EVENT TO CREATE, new VC data transfer check") 
     print(eventToCreate) 
     print(eventToCreate?.eventName) 
    } 


    @IBAction func addEventPressed(_ sender: Any) { 
     uploadDataToFirebase() 
    } 



    @IBAction func backBtnPressed(_ sender: Any) { 
     let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil) 

     let nextViewController = storyBoard.instantiateViewController(withIdentifier: "AddEventViewModelVC") as! AddEventViewModelVC 
     if let eventName = eventToCreate?.eventName { 
      nextViewController.eventName = eventName 
     } 

     if let eventLocation = eventToCreate?.eventLocation { 
      nextViewController.eventLocation = eventLocation 
     } 

     nextViewController.startTime = eventToCreate?.startTime 
     nextViewController.endTime = eventToCreate?.endTime 
     if let description = eventToCreate?.description { 
      nextViewController.eventDescription = description 
     } 

     if let password = eventToCreate?.password { 
      nextViewController.password = password 

     } 

     if let eventType = eventToCreate?.eventType 
     { 
      nextViewController.eventType = eventType 
     } 
     nextViewController.eventEnum = .password 



     self.present(nextViewController, animated:true, completion: { 
      nextViewController.titleLabel.text = nextViewController.eventEnum.rawValue 
      nextViewController.textField.text = self.eventToCreate?.password 
     }) 
    } 

    func uploadDataToFirebase(){ 


     let email = defaults.object(forKey: "email") as! String 
     print(email) 

     //Email->Events->Data 

     //Set Email 


     //Set events 
     ref?.child(email).child("events").setValue("Test") 



    } 

} 

は、事前にどうもありがとうございます:

+0

だとのsetValueの、あなたはのsetValueを使用することができます!文字列 'は電子メールですか? Firebaseデータベース内のキーにピリオドを付けることはできないため、問題を説明する可能性があります。 –

+0

多くのコードとエラーの機会 - 電子メールを無期限にしたり、期間内のような無効な文字を使用するとどうなりますか?問題を再現するために必要な[最小限の例](https://stackoverflow.com/help/mcve)を作成してください。 – Jay

+0

@IT:最小限の例を作る:ref?.child( "Lincolnasasa")。setValue( "Bill") まだリフレッシュしてもFirebaseには何も表示されません。 –

答えて

0

壊す事を最小限のコードまで、多くの場合、トラブルシューティングに役立ちます。例えば、その代わりに...それはまたあなたのFirebaseにクロージャを含めることをお勧めします。この

root_ref 
    events: "test" 

ようFirebaseになります。この

@class xxxx 
    var ref: DatabaseReference! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     ref = Database.database().reference() 
     ref.child("events").setValue("test") 
    } 

はそうあなたがすべてのエラーをキャッチすることができます呼び出してみてください以下のように:それは私が電子メール= defaults.object( "Eメール" forKey)しましょう `仮定完了ブロック(SWIFTで閉鎖)

let eventsRef = self.ref.child("events") 
eventsRef.setValue("test", withCompletionBlock: { error in 
    if error != nil { 
     print(error) 
    } 
}) 
+0

これまでの助けを感謝します。 "ref?"を使ってクロージャーエラーテストを試みましたが、エラーは戻ってきませんでした。しかし、代わりに "ref"を使用すると気付いています。次のエラーが表示されます。 "致命的なエラー:オプション値のアンラッピング中に予期せずnilが見つかりました" –