2016-04-17 4 views
0

Моя цель - отправить огромный словарь (содержащий около 10 массивов) из приложения iOS в приложение watchKit, но я не получаю никакого вывода на конец watchKit.Отправка огромного словаря через sendMessage - WatchKit

Если я отправить строку, следующий пример работает отлично:

let message = [ "fromParent": "some string" ] 
session.sendMessage(message, replyHandler: { replyDict in }, errorHandler: { error in }) 

, но когда я пытаюсь отправить словарь, я не получаю никакого вывода вообще:

let message = [ "fromParent": dictionary ] 
session.sendMessage(message, replyHandler: { replyDict in }, errorHandler: { error in }) 

Этот как я распечатать выход на конце watchKit в:

func session(session: WCSession, didReceiveMessage message: [String: AnyObject], replyHandler: [String: AnyObject] -> Void) { 
guard let parentMessage = message["fromParent"] as? String else { return } 
print(parentMessage) 
} 
+2

Вы попробовали отладить это в Xcode? Вы должны были понять, как? String' означает, что 'parentMessage' не будет напечатано. –

+0

@PetahChristian это было глупо от меня, чтобы не заметить, как? String, но в любом случае - я не могу перенести (> 100kb) большой словарь через sendMessage (только относительно небольшие) –

ответ

2

Я не могу передать (> 100kb) большой словарь с помощью SendMessage (только относительно маленькие)

Ошибка PayloadTooLarge была already mentioned.

Если вы реализуете надлежащий обработчик ошибок, вы увидите, что sendMessage терпит неудачу, потому что вы превысили объем данных, которые вы могли бы отправить в сообщении.

session.sendMessage(message, replyHandler: nil, errorHandler: { (error) -> Void in 
    print("sendMessage failed with error \(error)") 
}) 

Альтернативные подходы:

Это непрактично посылать такие большие объемы данных, и подвергнуть пользователю долгое время загрузки.

  • Если возможно, вы должны связать любые предустановленные/статические данные в часовом пучке так что не нужно быть переданы в первую очередь.

  • Если вам не нужно передавать такие большие объемы данных между телефоном и часами, вам необходимо использовать transferFile:metadata: (на которые распространяются только ограничения на свободное время на часах).

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