Передача UIImage с телефона на часы не работает
За watchOS 2
а также Xcode 7.3
Я пытаюсь отправить изображение со стороны iPhone на сторону часов. На стороне телефона, у меня есть это:
func sendImage() {
if WCSession.isSupported() {
let session = WCSession.defaultSession()
if session.watchAppInstalled {
do {
let image = UIImage(named: "myPic")
let imgData = NSKeyedArchiver.archivedDataWithRootObject(image!)
let dictionary = ["img": imgData]
try session.updateApplicationContext(dictionary)
} catch {
print("ERROR: \(error)")
}
}
}
}
Затем в WatchKit Extension
боковая сторона (ExtensionDelegate
файл), у меня есть:
func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]) {
let initialController = WKExtension.sharedExtension().rootInterfaceController as! InterfaceController
initialController.showImage(applicationContext["img"] as! NSData)
}
И в InterfaceController
:
func showImage(imageData: NSData) {
let image = UIImage(data: imageData, scale: 1.0)
self.myImage.setImage(image!)
}
где myImage
это WKInterfaceImage
выход. когда showImage
метод называется, imageData
не является nil
, но image
когда self.myImage.setImage(image!)
называется. Что я делаю неправильно?
2 ответа
Он считает, что использованный вами подход не является рекомендованным Apple (хотя частично с необходимыми мерами предосторожности могут быть использованы), Apple рекомендует использовать следующий метод обмена файлами (вы можете сохранить свое изображение во временный файл и отправить его в часы)
func transferFile(_ file: NSURL, metadata metadata: [String : AnyObject]?) -> WCSessionFileTransfer
Конечно, вы должны помнить, что обмен данными между Apple Watch и iPhone ограничен как измерение.
Я незнаком с NSKeyedArchiver
но это то, что я предлагаю.
Вы архивируете изображение на телефоне, а затем просто пытаетесь использовать данные на стороне часов. Я думаю, вам понадобится разархивировать, если это имеет смысл. Я обнаружил, что существует NSKeyedUnarchiver
который имеет unarchiveObjectWithData
функция. Попробуйте это вместо использования архивных данных, так что вы сначала разархивируете данные, а затем создадите UIImage.
Вы также можете вместо этого использовать функцию UIImagePNGRepresentation
который принимает UIImage на стороне телефона и отправляет NSData. Затем вы пропускаете дополнительный этап архивирования, который, я не уверен, вам даже нужен. Затем вы просто создаете UIImage с NSData, который был отправлен.
Если это не работает, добавьте распечатку отправляемых вами данных и данных, полученных на Watch, и сравните их.