2016-08-29 5 views
0

私はFirebaseで辞書の値を取得し、setValuesForKeysWithDictionaryメソッドを使用してアプリケーションの 'User'クラスにキャストしようとしていますが、失敗し続けます。誰かがそれを説明するのを助けることができたら、それは大いに評価されるだろおかげ辞書に動的firebaseキーをキャストする

class User : NSObject{ 

var currentJob : String? 
var currentOrg : String? 
var hasJobs : Bool? 
var hasOrganisations : Bool? 
var isCurrentOrgAdmin : Bool? 
var organisations : [String : AnyObject]? 
} 

var user = User() 
func bindDataForCurrentUser() -> User { 

    firebase.child("Users").child(currentUserID).observeEventType(FIRDataEventType.Value) { (snap:FIRDataSnapshot) in 
     if let dictionary = snap.value as? [String : AnyObject] { 
      print("dictionary \(dictionary)") 
     self.user.setValuesForKeysWithDictionary(dictionary) 
      print("user: \(self.user)") 
     } 
    } 
    return self.user 
} 

は、それが第二の印刷ラインにそれを作るが、ここでは、最初の行での印刷の辞書ではないです:任意の助けを事前に

["hasOrganisations": 1, "isCurrentOrgAdmin": 1, "currentOrg": -KQFGX4oNcYPjXhlPZ9t, "hasJobs": 0, "organisations": { "-KQFGX4oNcYPjXhlPZ9t" = 1;"-KQFGZl-M4gSPTEjEXNH" = 1;}, "currentJob": -KQKQRfRYF4m3UAMaycd]

感謝を! 編集:申し訳ありませんが、コンソールにエラーを追加するのを忘れ:

dictionary ["hasOrganisations": 1, "isCurrentOrgAdmin": 1, "currentOrg": -KQFGX4oNcYPjXhlPZ9t, "hasJobs": 0, "organisations": { "-KQFGX4oNcYPjXhlPZ9t" = 1; "-KQFGZl-M4gSPTEjEXNH" = 1;}, "currentJob": -KQKQRfRYF4m3UAMaycd]

2016-08-29 13:00:08.909 iComply[49608:5287826] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key hasOrganisations.'

+0

親切にsetValuesForKeysWithDictionaryメソッドを更新してください –

答えて

1

はこれを試してください: -

class User : NSObject{ 

     var currentJob : String? 
     var currentOrg : String? 
     var hasJobs : Bool? 
     var hasOrganisations : Bool? 
     var isCurrentOrgAdmin : Bool? 
     var organisations : [String : AnyObject]? 
     } 

    var user = User() 

    func bindDataForCurrentUser() -> User { 

     let ref = FIRDatabase.database().reference().child("Users")child(FIRAuth.auth()!.currentUser!.uid) 

     ref.observeSingleEventOfType(.Value, withBlock: { snapshot in 
      print(snapshot.value) 
      self.user = [] 

        if let userDict = snap.value as? [String, AnyObject] { 
         let specificUser = User() 
         specificUser.setValuesForKeysWithDictionary(userDict) 
         self.user.append(specificUser) 
         } 

     }) 
    } 
    return self.user 
} 

PS: - あなたが複数のクエリを持っている場合は、クラスに挿入var user = [User]()を使用してobserveSingleEventOfType反復内側にそれらのデータスナップのそれぞれを介して。それはあなたがこのスレッドに聞いておきたい場合は一度で行われたスレッドからの観察者が..あなたがobserveEventTypeに戻ってそれを変更することができます削除するので、私はobserveEventTypeobserveSingleEventOfTypeを使用する理由... :)

+0

ワットありがとうございます。単一のイベントタイプのリスナーは素晴らしいです!私は聴き手を通してクラッシュしていて、それがあってはならない時に行くのを続けていました。ありがとう! –

+0

こんにちは申し訳ありませんが、これを行うには15の評判ポイントが必要ですが、うまくいけば誰かがこれを見るか、もう一度私はもう一度お返事ありがとうございます:) –

関連する問題