2015-02-06 2 views
1

У меня есть следующие методы делегирования PubNub, которые вызываются в точном порядке, как указано ниже.SwiftyJSON не будет анализировать строку JSON, которая позже будет анализироваться без проблем.

public func pubnubClient(client: PubNub!, didSubscribeOnChannels channels: NSArray!) { 
    log.info("Subscribed to \(channels.count) channels") 
    PubNub.sendMessage("{\"type\": \"CHAT_MSG\",\"msgId\": \"1233123\",\"text\": \"hello\",\"username\": \"attheodo\",\"uuid\": \"user_1\",\"associatedPlaceId\": 2}", toChannel:pubnubChannels[0]) 
} 

public func pubnubClient(client: PubNub!, subscriptionDidFailWithError error: PNError!){ 
    log.error("Subscribe Error: \(error)") 
} 

// MARK: Messages 
public func pubnubClient(client: PubNub!, willSendMessage message: PNMessage!) { 

    let payload = JSON(message.message) 
    println(payload) 
    println(payload.rawString()) 
    println(_stdlib_getTypeName(payload)) 
    println(payload["type"]) 


} 

public func pubnubClient(client: PubNub!, didReceiveMessage message: PNMessage!) { 

    let payload = JSON(message.message) 
    println(payload) 
    println(payload.rawString()) 
    println(_stdlib_getTypeName(payload)) 
    println(payload["type"]) 

} 

Проблема заключается в SwiftyJSON не будет разбирать правильно строку, возвращаемую willSendMessage но будет разбирать правильно один возвращенное didReceiveMessage хотя, на моих глазах, кажется, что они точно так же. Это отчасти сводит меня с ума.

Пожалуйста, проверьте соответствующий выход консоли ниже:

// willSendMessage 
{"type": "CHAT_MSG","msgId": "1233123","text": "hello","username":  "attheodo","uuid": "user_1","associatedPlaceId": 2} 

Optional("{\"type\": \"CHAT_MSG\",\"msgId\": \"1233123\",\"text\": \"hello\",\"username\": \"attheodo\",\"uuid\": \"user_1\",\"associatedPlaceId\": 2}") 

_TtV10SwiftyJSON4JSON 

// cannot find payload["type"] 
null 

// didReceiveMessage 
{ 
    "username" : "attheodo", 
    "uuid" : "user_1", 
    "msgId" : "1233123", 
    "associatedPlaceId" : 2, 
    "type" : "CHAT_MSG", 
    "text" : "hello" 
} 

Optional("{\n \"username\" : \"attheodo\",\n \"uuid\" : \"user_1\",\n \"msgId\" : \"1233123\",\n \"associatedPlaceId\" : 2,\n \"type\" : \"CHAT_MSG\",\n \"text\" : \"hello\"\n}") 

_TtV10SwiftyJSON4JSON 

// payload["type"] is ok 
CHAT_MSG 

Что за @ # $! здесь происходит? Пожалуйста, помогите, это поместит меня на meds>: |

ответ

0

Библиотека PubNub автоматически кодирует/расшифровывает JSON для вас для типов объектов, таких как словари. Попробуйте исключить использование сторонних JSON-библиотек и используйте родные словари Obj-c.