将对象添加到字典(而不是字典只保留最近的对象)Swift
Add objects to Dictionary (instead of Dictionary only keeping most recent object) Swift
我正在(从iOS)传递一些数据(color
s),但是当我在另一端(WatchKit)收到数据(color
s)时只显示最近的一个字典项目。
iOS 函数 传递 数据:
publicData.performQuery(query, inZoneWithID: nil) { results, error in
if error == nil { // There is no error
for play in results! {
let newPlay = Play()
newPlay.tColor = play["TColor"] as! String
do {
try WatchSessionManager.sharedManager.updateApplicationContext(["color" : newPlay.tColor])
NSLog("Dict: %@", ["color" : newPlay.tColor])
} catch {
print(error)
}
self.objects.append(newPlay)
}
所有三个 color
项都显示在 NSLog
函数中以传递数据。
Dict: {
color = FDB927;
}
Dict: {
color = 000000;
}
Dict: {
color = 000000;
}
WatchKit 函数 接收 数据:
func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]) {
NSLog("Application Context %@", applicationContext.description)
dispatch_async(dispatch_get_main_queue()) { [weak self] in
self?.dataSourceChangedDelegates.forEach { [=13=].dataSourceDidUpdate(DataSource(data: applicationContext))}
}
}
但是在 WatchKit 方面,只有最后一个 Dictionary
项目出现在 NSLog
:
Application Context ["color": 000000, "matchup"]
非常感谢任何帮助。谢谢!
这正是 WatchConnectivity 的 updateApplicationContext 的工作方式(只发送最新的)。如果您希望所有的字典都到达,您应该使用 transferUserInfo API,它将字典排队等待交付,而不是只交付最新的字典。
Communicating with a Counterpart
您可以通过以下方式与对端应用进行通信:
- 使用 updateApplicationContext:error: 方法将最近的状态 信息传达给对方。当对方醒来时,它可以使用此信息来更新自己的状态。使用此方法发送新词典会覆盖以前的词典。
- 使用 sendMessage:replyHandler:errorHandler: 或 sendMessageData:replyHandler:errorHandler: 方法将数据传输到可到达的对应方。这些方法用于在您的 iOS 应用和 WatchKit 扩展程序之间进行即时通信。可达 属性 当前必须为 YES 才能使这些方法成功。
您必须使用 sendMessage:replyHandler:errorHandler: 而不是 updateApplicationContext:error:
我正在(从iOS)传递一些数据(color
s),但是当我在另一端(WatchKit)收到数据(color
s)时只显示最近的一个字典项目。
iOS 函数 传递 数据:
publicData.performQuery(query, inZoneWithID: nil) { results, error in
if error == nil { // There is no error
for play in results! {
let newPlay = Play()
newPlay.tColor = play["TColor"] as! String
do {
try WatchSessionManager.sharedManager.updateApplicationContext(["color" : newPlay.tColor])
NSLog("Dict: %@", ["color" : newPlay.tColor])
} catch {
print(error)
}
self.objects.append(newPlay)
}
所有三个 color
项都显示在 NSLog
函数中以传递数据。
Dict: {
color = FDB927;
}
Dict: {
color = 000000;
}
Dict: {
color = 000000;
}
WatchKit 函数 接收 数据:
func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]) {
NSLog("Application Context %@", applicationContext.description)
dispatch_async(dispatch_get_main_queue()) { [weak self] in
self?.dataSourceChangedDelegates.forEach { [=13=].dataSourceDidUpdate(DataSource(data: applicationContext))}
}
}
但是在 WatchKit 方面,只有最后一个 Dictionary
项目出现在 NSLog
:
Application Context ["color": 000000, "matchup"]
非常感谢任何帮助。谢谢!
这正是 WatchConnectivity 的 updateApplicationContext 的工作方式(只发送最新的)。如果您希望所有的字典都到达,您应该使用 transferUserInfo API,它将字典排队等待交付,而不是只交付最新的字典。
Communicating with a Counterpart
您可以通过以下方式与对端应用进行通信:
- 使用 updateApplicationContext:error: 方法将最近的状态 信息传达给对方。当对方醒来时,它可以使用此信息来更新自己的状态。使用此方法发送新词典会覆盖以前的词典。
- 使用 sendMessage:replyHandler:errorHandler: 或 sendMessageData:replyHandler:errorHandler: 方法将数据传输到可到达的对应方。这些方法用于在您的 iOS 应用和 WatchKit 扩展程序之间进行即时通信。可达 属性 当前必须为 YES 才能使这些方法成功。
您必须使用 sendMessage:replyHandler:errorHandler: 而不是 updateApplicationContext:error: