firebaseのリアルタイムデータベースを使って値の保存を行なったのですが、値の取り出し方がわかりません。
どのようにすれば値を取得することができるのでしょうか?
class userViewController: UIViewController { @IBOutlet weak var name: UILabel! @IBOutlet weak var age: UILabel! @IBOutlet weak var job: UILabel! let ref = Database.database().reference() override func viewDidLoad() { super.viewDidLoad() let userID = Auth.auth().currentUser?.uid ref.child("users").child(userID!).observeSingleEvent(of: .value, with: { (snapshot) in // Get user value let value = snapshot.value as? NSDictionary let username = value?["名前"] as? String ?? "" self.name.text = username // ... }) { (error) in print(error.localizedDescription) } // Do any additional setup after loading the view. }
うまく行かないとはどういう意味ですか?with:ブロックの中に制御は到達しているのでしょうか?それともerrorが出力されているですか?
回答ありがとうございます!
Argument passed to call that takes no arguments このようなエラーになってしまいます。
そもそも取り出し方がおかしいのでしょうか?
User型の定義はどうなっていますか?自作のクラスか何かですよね?
というかlet user = User(username: "名前")の行は要るんですかね?let usernameにsaが入っているのでしたらちゃんと値が取れてるという事になりそうですが。
なるほどです!
上記コードなど編集しました!
let user = User(username: "名前")を消してみて、label.textに代入してみたのですが、文字が消えてしまいます。
おそらく、 let username = value?["名前"] as? String ?? "" がおかしいと思うのですが、不自然な点はありますでしょうか?
firebase使ったことがないので正解はわからないのですが、print(value)で辞書をまるごと出力してみるとコンソールにどう出ますか?
No theme registered with id=0 nil このようになります。
んー、では
ref.child("users").child(userID!).observeSingleEvent
を
ref.observeSingleEvent
に変えて、
print("value=\(value)")
とすると、何が出ますか?
ひょっとしてref.child("users")のusersの頭文字が大文字じゃないと駄目とか・・・
Users = {
4HTj10RR6FMZ32JxDXfLHlUOElA2 = {
"\U540d\U524d" = ss;
"\U5e74\U9f62" = 21;
"\U8077\U6b74" = "\U5927\U5b66\U751f";
};
CBGw6Z8dLsOtA2ETYdooT8ZiOXV2 = {
"\U540d\U524d" = "\U6d45\U7530";
"\U5e74\U9f62" = 23;
"\U8077\U6b74" = "\U5927\U5b66\U751f";
};
このようになりました!
やっぱりref.child("Users")じゃないですか?
Usersに大文字にしたら出力できました笑
本当にありがとうございます!!
????
回答1件
あなたの回答
tips
プレビュー