Ios 使用核心数据时如何使用Watch Connectivity共享数据
在我的iOS应用程序中,我使用核心数据存储数据,并使用提取请求创建一个Ios 使用核心数据时如何使用Watch Connectivity共享数据,ios,swift,core-data,watchkit,watchconnectivity,Ios,Swift,Core Data,Watchkit,Watchconnectivity,在我的iOS应用程序中,我使用核心数据存储数据,并使用提取请求创建一个NSManagedObjects数组,以显示在UITableView中 在Watch OS上,我检查是否支持WCSession并激活会话,然后从Watch OS扩展向iOS应用程序发送消息 当iOS应用程序从watchOS接收到消息时,它应该将对象数组发送到watchOS扩展,以在WKInterfaceTable中显示数据,但我不确定如何执行此操作。最终,我想要实现的是 如何与watchOS扩展共享对象数组 如果用户在手表上
NSManagedObject
s数组,以显示在UITableView
中
在Watch OS上,我检查是否支持WCSession
并激活会话,然后从Watch OS扩展向iOS应用程序发送消息
当iOS应用程序从watchOS接收到消息时,它应该将对象数组
发送到watchOS扩展,以在WKInterfaceTable
中显示数据,但我不确定如何执行此操作。最终,我想要实现的是
- 如何与watchOS扩展共享
对象数组
- 如果用户在手表上添加/编辑/删除数组中的对象,我们如何更新iPhone上的数据
- 此外,iOS应用程序嵌入在
中,因此与哪个视图控制器通信是否重要UITabBarController
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)
}
}
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"])
}
IOS应用程序:收藏夹ViewController
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)
}
}
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"])
}
您可以使用sendMessage中的replyHandler来执行此操作。确保在Watch和iOS应用程序上都实现了回复处理程序,以获得此结果
基本上,如果你做对了,你的回复处理程序可以确保你的iOS应用程序对手表应用程序的消息做出响应
另外,说到您的响应(发送一个对象数组),您应该将其作为字典发送,并在手表上取回。首先,这是一个非常好的问题。对于初学者,我建议您观看WWDC 2015:第713次会议-介绍手表连接的本次会议。这是可以找到的 现在谈谈你的实际问题。这里有一个很棒的教程,向您展示了如何使用应用程序组在Apple Watch应用程序和容器应用程序之间通信核心数据,因为这使您能够访问所有共享内容,例如核心数据甚至默认值 然后,您可以在下面找到有关如何执行此操作的完整教程 希望能有帮助,朱利安。
- 如何与Watch OS扩展共享对象数组?
由于您使用的是
framework,因此请使用WatchConnectivity
方法从iPhone发送对象数组,并在sendMessage
中执行favoriteinterfacecontroller
方法以获取响应,或者您可以在replyhandler中获取数组func会话(session:WCSession,didReceiveMessage
- 如果用户在Watch OS上添加/编辑/删除数组中的对象
如何在iPhone上更新数据?
将objectId连同
方法中的新更改从手表发送到手机,在手机上接收到数据库中的更改后,将其保存并在replyHandler中发送更新后的值,以便相应地更新手表内容sendMessage
- iOS应用程序也嵌入到UITabBarController中,因此
与哪个视图控制器通信重要吗?
您希望与之通信的或负责进行更改的viewController应处于活动状态。如果多个viewController正在侦听
,则当您从watch发送任何消息时,所有活动控制器都将接收该消息。您应包括某种wcSessionLegates
在您的标识r
字典中,这样您就可以知道要执行的操作。例如,如果您想发送消息
删除对象,那么当
发送消息时,监视
将包含标识符
,以便在接收时可以检查删除
值并执行标识符
操作删除te