2015-09-24 145 views
0

我試圖通過color爲每個Play發現我的CloudKit數據庫。傳遞字符串從iPhone

iPhone - >手錶

的iOS TableViewController

func getCloudKit() { 
    ///... 
    let publicData = container.publicCloudDatabase 
    publicData.performQuery(query, inZoneWithID: nil) { results, error in 
     if error == nil { // There is no error 
      for play in results! { 
       let newPlay = Play() 
       do { 
        try WatchSessionManager.sharedManager.updateApplicationContext(["color" : newPlay.teamColor]) 
        NSLog("NewPColor: %@", newPlay.teamColor) 
       } catch { 
        print(error) 
       } 
       self.objects.append(newPlay) 
      } 
     } else { 
      print(error) 
     } 
    } 
} 

當我NSLog什麼在iOS的側獲得通過,它記錄的3 color小號完美。

2015-09-25 21:10:28.706 Play[16444] NewPColor: FDB927 
2015-09-25 21:10:28.707 Play[16444] NewPColor: 000000 
2015-09-25 21:10:28.708 Play[16444] NewPColor: 000000 

但是當我去觀看側,沒有在colorLabel顯示出來。 (我不知道如果setText甚至獲取調用那裏,因爲 「從iPhone」 甚至不顯示。)

WatchKit InterfaceController

func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]) { 
    let colorWatch = applicationContext["color"] as? String 

    dispatch_async(dispatch_get_main_queue()) { 
     if let colorWatch = colorWatch { 
      self.colorLabel.setText("From iPhone: \(colorWatch)") 
     } 
    } 
} 

任何想法?可以根據需要發佈任何額外的代碼,只是讓我知道。謝謝!

編輯:每這裏的問題是我WCSession代碼

的iOS WatchSessionManager

class WatchSessionManager: NSObject, WCSessionDelegate { 

    static let sharedManager = WatchSessionManager() 
    private override init() { 
     super.init() 
    } 

    private let session: WCSession? = WCSession.isSupported() ? WCSession.defaultSession() : nil 

    private var validSession: WCSession? { 

     if let session = session where session.paired && session.watchAppInstalled { 
      return session 
     } 
     return nil 
    } 

    func startSession() { 
     session?.delegate = self 
     session?.activateSession() 
    } 
} 

extension WatchSessionManager { 

    // Sender 
    func updateApplicationContext(applicationContext: [String : AnyObject]) throws { 
     if let session = validSession { 
      do { 
       try session.updateApplicationContext(applicationContext) 
      } catch let error { 
       throw error 
      } 
     } 
    } 

    // Receiver 
    func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]) { 
     // handle receiving application context 

     dispatch_async(dispatch_get_main_queue()) { 
      // make sure to put on the main queue to update UI! 
     } 
    } 
} 

回答

1

注:您在appContext字典中傳遞「newPlay」,但在日誌中打印「newPlayoff」。

我相信其他地方已經設置了WCSession委託,並呼籲activateSession

+0

遺憾的是第一部分是複製和粘貼的mixup。而對於'WCSession'代碼我確實有這個,我發佈它只是爲了防止你想看看它。有任何想法嗎?謝謝! – SRMR