2016-04-29 6 views
0

Für watchOS 2 und Xcode 7.3, versuche ich ein Bild, das ich auf der iPhone-Seite auf die Uhr Seite zu senden. In der Telefonseite, habe ich diese:Übergeben eines UIImage vom Handy zur Uhr funktioniert nicht

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)") 
      } 
     } 
    } 
} 

Dann wird in der WatchKit Extension Seite (ExtensionDelegate-Datei), die ich habe:

func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]) { 

    let initialController = WKExtension.sharedExtension().rootInterfaceController as! InterfaceController 
    initialController.showImage(applicationContext["img"] as! NSData) 
} 

und in InterfaceController:

func showImage(imageData: NSData) { 
    let image = UIImage(data: imageData, scale: 1.0) 
    self.myImage.setImage(image!) 
} 

wo myImage ist eine WKInterfaceImage Steckdose. Wenn showImage Methode aufgerufen wird, ist imageData nicht nil, aber image ist, wenn self.myImage.setImage(image!) aufgerufen wird. Was mache ich falsch?

Antwort

0

Ich bin nicht vertraut mit NSKeyedArchiver, aber das ist, was ich vorschlagen.

Sie archivieren das Bild auf dem Telefon und versuchen dann nur, die Daten auf der Uhrseite zu verwenden. Ich denke, Sie würden eine Art von Archivierung benötigen, wenn das Sinn macht. Ich habe festgestellt, dass es eine NSKeyedUnarchiver gibt, die eine unarchiveObjectWithData Funktion hat. Versuchen Sie dies, anstatt die archivierten Daten zu verwenden, also entpacken Sie zuerst die Daten und konstruieren dann ein UIImage.

Sie können stattdessen auch die Funktion UIImagePNGRepresentation verwenden, die auf der Telefonseite ein UIImage akzeptiert und die NSData übergibt. Dann überspringen Sie den zusätzlichen Schritt der Archivierung, von dem ich nicht sicher bin, ob Sie ihn überhaupt benötigen. Dann konstruierst du einfach den UIImage mit den NSData, die gesendet wurden.

Wenn dies nicht funktioniert, fügen Sie einen Ausdruck der gesendeten Daten und der empfangenen Daten auf der Uhr hinzu und vergleichen Sie sie.

0

Es ist der Ansicht, dass der von Apple empfohlene Ansatz nicht der von Apple empfohlene ist (obwohl teilweise mit den notwendigen Vorsichtsmaßnahmen verwendet werden kann), Apple empfiehlt die folgende Methode für den Austausch von Dateien (Sie können Ihr Bild in einer temporären Datei speichern und senden Sie ihr zu sehen)

func transferFile(_ file: NSURL, metadata metadata: [String : AnyObject]?) -> WCSessionFileTransfer 

Natürlich müssen Sie daran denken, dass der Datenaustausch zwischen Apple Watch und iPhone als Dimension begrenzt ist.

Verwandte Themen