2015-08-10 3 views
4

See this linkДоступ PNMessageResult в PubNub Swift

На основании следующей функции я могу получить ответ,

func client(client: PubNub!, didReceiveMessage message: PNMessageResult!) { 
println(message) 

Но, я могу получить доступ к данным только message.data, который находится в формат PNMessageData.

Даже то, что возвращает данные в следующем формате:

{ 
message = "{}"; 
subscribedChannel = 123; 
timetoken = 14392105288780634;} 

Как я получить доступ к значению сообщения внутри message.data (PNMessageData)?

ответ

0

Вы очень близки к доступу к данным. SDK сериализует принимаемый JSON и сохраняет сообщение в виде словаря на message.data.message, который должен быть словарем.

Попробуйте это:

func client(client: PubNub!, didReceiveMessage message: PNMessageResult!) { 
    let dictionary: AnyObject = message.data.message 
    println(dictionary["accelertiony"]); 
    println(dictionary["accelerationx"]); 
} 
+0

Есть несколько изменений, хотя, опубликованные данные от сервера десериализируются и работал только после этого. var error: NSError? let x = NSJSONSerialization.JSONObjectWithData ((словарь как! NSString) .dataUsingEncoding (NSUTF8StringEncoding, allowLossyConversion: true) !, options: NSJSONReadingOptions.MutableContainers, error: & error) as! Словарь Nigilan

1

Я написал простой метод для анализа PNMessageResult

func client(_ client: PubNub, didReceiveMessage message: PNMessageResult) { 

    //Message Received on Channel: 
    let channel = message.data.channel 

    //Message Received: 
    guard let messageData = message.data.message as? [String : AnyObject] else { return } 

    //Event: 
    guard let event:String = messageData["event"] as? String 

    let data:AnyObject = messageData["data"] else { return } 

    guard let dict = data as? NSDictionary else { fatalError("Couldn't parse pubnub message") } 

    //This will be message in dictionary 
    let mutableDict = dict.mutableCopy() as! NSMutableDictionary 

} 
Смежные вопросы