2017-05-12 3 views
0

*** Terminating app due to uncaught exception 'InvalidFirebaseData', reason: '(setValue:) Cannot store object of type DemoApp.SendMessageInput at . Can only store objects of type NSNumber, NSString, NSDictionary, and NSArray.エラー「InvalidFirebaseData」これは私が送信しようとしている方法です

をFirebaseにデータを送信中。 通常の辞書を使用してデータを渡すと上記のエラーは発生しませんが、Modelを介して1回以上実行したい場合は、将来変更が発生した場合にdic osではなく入力用にモデルを呼び出すことができます。 1つのファイルのみ。

let messageItem = SendMessageInput(content: text, displayName: currrentUser.name, fileLength: 0, fileUrl: "", fromID: currrentUser.userId, isRead: false, messageStatus: 0, messageType: MessageType.text.rawValue, timestamp: Timestamp, toID: self.toUserID) 

    itemRef.setValue(messageItem) 

SendMessageInput.swift

class SendMessageInput: Reflect{ 
    var content: String = "" 
    var displayName: String = "" 
    var fileLength: Int = 0 
    var fileUrl: String = "" 
    var fromID: String = "" 
    var isRead: Bool = false 
    var messageStatus: Int = 0 
    var messageType: String = "" 
    var timestamp: Int = 0 
    var toID: String = "" 

    var values:[String: AnyObject]{ 
     let arrayValue: [Any] = [content, displayName, fileLength, fileUrl, fromID, isRead, messageStatus, messageType, timestamp, toID] 
     var dic: [String: AnyObject] = [:] 
     for index in 0..<self.getProperties().count{ 
      dic[self.getProperties()[index]] = arrayValue[index] as AnyObject? 
     } 
     return dic 
    } 

    init(content: String, displayName: String, fileLength: Int, fileUrl: String, fromID: String, isRead: Bool, messageStatus: Int, messageType: String, timestamp: Int, toID: String) { 
     self.displayName = displayName 
     self.fileLength = fileLength 
     self.fileUrl = fileUrl 
     self.fromID = fromID 
     self.isRead = isRead 
     self.messageStatus = messageStatus 
     self.messageType = messageType 
     self.timestamp = timestamp 
     self.toID = toID 
    } 

} 

Reflect.swift

class Reflect: NSObject { 

    func getProperties()->[String] { 
     let mirror = Mirror(reflecting: self) 
     var properties = [String]() 
     for childern in mirror.children { 
      if childern.label == "super"{continue} 
      properties.append(childern.label!) 
     } 
     return properties 
    } 

    func getClassName() -> String { 
     let mirror = Mirror(reflecting: self) 
     return String(describing: mirror.subjectType) 
    } 
} 

答えて

2

あなたは、任意のオブジェクトに.setValue()を呼び出すことはできません。

あなたのオブジェクトに.valuesと電話するのを忘れているようです。試してみてください

itemRef.setValue(messageItem.values) 
+0

ありがとう、私は完全に忘れました。 – Nitesh

関連する問題