2016-04-29 6 views
0

watchOS 2Xcode 7.3については、私はiPhone側にある画像を時計側に送信しようとしています。 WatchKit Extension側(ExtensionDelegateファイル)には、私が持っている、そして、携帯電話から時計にUIImageを渡していない

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

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メソッドが呼び出された場合、imageDatanilではありませんが、imageは、self.myImage.setImage(image!)と呼ばれます。私は間違って何をしていますか?

答えて

0

私はNSKeyedArchiverに慣れていませんが、これが私の提案です。

携帯端末で画像をアーカイブしておき、ウォッチ側でデータを使用しようとしています。私はそれが理にかなっていれば、あなたは何らかの種類のアーカイブを取る必要があると思います。私は、が存在し、それはの機能を有することを見出した。アーカイブされたデータを使用する代わりにこれを試してください。最初にデータをアーカイブ解除し、UIImageを構築します。

代わりに、UIImagePNGRepresentation関数を使用して電話側でUIImageを取得し、NSDataを送信することもできます。それから、アーカイブの余計なステップをスキップします。これはあなたが必要とするものではないと私は確信しています。次に、送信されたNSDataを使用してUIImageを構築します。

これで解決しない場合は、送信しているデータと受信したデータをウォッチに追加して比較してください。

0

あなたが使用したアプローチはAppleが推奨するものではないと考えていますが(必要な予防措置を使用することもできますが)、Appleはファイルを交換するために次の方法を使用することを推奨しています(画像を一時ファイル

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

もちろん、Apple WatchとiPhoneの間のデータのやりとりは次元として制限されていることを覚えておく必要があります。

関連する問題