在使用Core Data时如何使用Watch Connectivity共享数据

赖利·戴夫(RileyDev)

在我的iOS应用程序中,我使用Core Data存储数据和获取请求以创建NSManagedObjects数组以显示在中UITableView

在Watch OS上,我检查是否WCSession支持并激活会话,然后从watchOS扩展向iOS应用发送消息。

当iOS应用程序从watchOS收到消息时,它应将数组发送Objects到watchOS扩展以在中显示数据WKInterfaceTable,但是我不确定如何执行此操作。最终,我要实现的目标是:

  • 如何Objects与watchOS扩展共享阵列

  • 如果用户在Watch上的数组中添加/编辑/删除对象,我们如何更新iPhone上的数据?

  • 另外,iOS应用程序被嵌入在UITabBarController其中,与我与哪个视图控制器通信是否重要?

观看OS FavouritesInterfaceController

var session : WCSession!

override func willActivate() {
    // This method is called when watch view controller is about to be visible to user
    super.willActivate()

    //Check if session is supported and Activate
    if (WCSession.isSupported()) {
        session = WCSession.defaultSession()
        session.delegate = self
        session.activateSession()
    }
}

override func awakeWithContext(context: AnyObject?) {
    super.awakeWithContext(context)
    // Interface Objects

    //Send Message
    sendmessagetoiphone()   
}

func sendMessageToIphone() {
    if(WCSession.isSupported()){
        session.sendMessage(["b":"goodBye"], replyHandler: nil, errorHandler: nil)
    }
}

iOS应用程序:FavouritesViewController

var objects = [Objects]()

func loadData() { 

    let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
    let request = NSFetchRequest(entityName: "Objects")
    request.sortDescriptors = [NSSortDescriptor(key: "date", ascending: true)]
    do {
        try
            self.objects = moc.executeFetchRequest(request) as! [Objects]
        // success ...
    } catch {
        // failure
        print("Fetch failed")
    }
 }

   func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {
    //handle received message   
    let value = message["Value"] as? String
    dispatch_async(dispatch_get_main_queue()) {
        self.messageLabel.text = value
    }
    //send a reply
    replyHandler(["Value":"Hello Watch"])
   }
穆尼巴
  • 如何通过Watch OS Extension共享对象数组?由于您使用的是WatchConnectivity框架,因此请使用sendMessage方法从iPhone发送对象数组,并在您的FavoritesInterfaceController实现func session(session: WCSession, didReceiveMessage方法中发送该对象数组以获取响应,也可以在Replyhandler中获取该数组

  • 如果用户在Watch OS上添加/编辑/删除数组中的对象,我们如何更新iPhone上的数据?

    将objectId以及方法的新更改sendMessage从手表发送到电话,通过电话接收后,数据库中的更改会将其保存并在您的ReplyHandler中发送更新的值,以便您的手表内容将相应地更新。

  • iOS应用程序也嵌入在UITabBarController内,因此与哪个视图控制器通信是否重要?

    您需要与之通信的viewController,或者负责进行更改的viewController应该还活着。如果有多个ViewController正在监听,WCSessionDelegates则当您从监视发送任何消息时,所有实时控制器都会收到该消息。您应该identifiersendMessage字典中包含某种形式,以便您知道要执行的操作。就像您要发送给delete对象一样,watch发送消息时identifier将包含该消息,delete以便在接收时可以检查该identifier值并执行delete操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章