如何通过多个字典/多个';应用程序更新';通过swift 2.2手表连接
我如何通过手表连接从手机向手表发送多个“应用程序更新”(例如一个阵列中的多个不同值) 我的应用程序更新成功地从我的表视图中的选定单元格发送了如何通过多个字典/多个';应用程序更新';通过swift 2.2手表连接,swift,watchos-2,watchconnectivity,wcsession,Swift,Watchos 2,Watchconnectivity,Wcsession,我如何通过手表连接从手机向手表发送多个“应用程序更新”(例如一个阵列中的多个不同值) 我的应用程序更新成功地从我的表视图中的选定单元格发送了numberItem值,但我还想从选定单元格数组发送userid值 现在,它只识别一个值,不更新另一个值,但显示“请重试”作为我的标签文本 如何通过两个或多个应用程序更新发送其他附加值(如userid和username) 我的datasource.swift文件是: enum Item { case Number(String) ca
numberItem
值,但我还想从选定单元格数组发送userid值
现在,它只识别一个值,不更新另一个值,但显示“请重试”作为我的标签文本
如何通过两个或多个应用程序更新发送其他附加值(如userid和username)
我的datasource.swift文件是:
enum Item {
case Number(String)
case uidValue(String)
case Unknown
}
init(data: [String : AnyObject]) {
if let numberItem = data["number"] as? String {
item = Item.Number(numberItem)
print("enum item is")
print(numberItem)
} else if let uidItem = data["uidValue"] as? String {
item = Item.uidValue(uidItem)
print("enum item is")
print(uidItem)
} else {
item = Item.Unknown
}
}
手表上的我的接口控制器(连接到我的数据标签)包括:
func dataSourceDidUpdate(dataSource: DataSource) {
switch dataSource.item {
// the first application update- commented out to try the 2nd update
//case .Number(let numberItem):
// titleLabel.setText(numberItem)
// print(numberItem)
// the second application update
case .uidValue(let uidItem):
uidLabel.setText(uidItem)
print(uidItem)
case .Unknown:
nidLabel.setText("please retry")
default:
print("default")
}
}
您不能单独发送项目,因为
updateApplicationContext
会用最新的数据替换任何早期的应用程序上下文数据。在中的两个不同位置简要介绍了这一点:
此方法覆盖以前的数据字典
此方法将替换以前设置的字典
当然,苹果优化了整个过程的能源/内存效率。在这种情况下,当第二个数据排队等待传输时,如果先前的应用程序上下文数据仍在要传输的队列中,则可以丢弃先前的数据以避免不必要地传输/存储它。你的手表甚至不会收到第一个数据
由于您的手表只会收到两条数据中的一条,这就解释了为什么当您在收到的字典中检查一个键时会看到“请重试”,但它只包含另一个键的数据
如何一次传输多个项目
在同一个字典中包含这两个项,并使用单个传输传输该字典
let data = ["number" : numberItem, "uidValue" : uidItem]
try WatchSessionManager.sharedManager.updateApplicationContext(data)
...
在手表方面,您可以简单地同时更新标题标签和uid标签,而不是有条件地只更新其中一个
if let numberItem = data["number"] as? String {
titleLabel.setText(numberItem)
}
if let uidItem = data["uidValue"] as? String {
uidLabel.setText(uidItem)
}
您不能单独发送项目,因为
updateApplicationContext
会用最新的数据替换任何早期的应用程序上下文数据。在中的两个不同位置简要介绍了这一点:
此方法覆盖以前的数据字典
此方法将替换以前设置的字典
当然,苹果优化了整个过程的能源/内存效率。在这种情况下,当第二个数据排队等待传输时,如果先前的应用程序上下文数据仍在要传输的队列中,则可以丢弃先前的数据以避免不必要地传输/存储它。你的手表甚至不会收到第一个数据
由于您的手表只会收到两条数据中的一条,这就解释了为什么当您在收到的字典中检查一个键时会看到“请重试”,但它只包含另一个键的数据
如何一次传输多个项目
在同一个字典中包含这两个项,并使用单个传输传输该字典
let data = ["number" : numberItem, "uidValue" : uidItem]
try WatchSessionManager.sharedManager.updateApplicationContext(data)
...
在手表方面,您可以简单地同时更新标题标签和uid标签,而不是有条件地只更新其中一个
if let numberItem = data["number"] as? String {
titleLabel.setText(numberItem)
}
if let uidItem = data["uidValue"] as? String {
uidLabel.setText(uidItem)
}
这些值完美地传递给了Watch和enum类。伟大的但是这些值还没有显示在手表标签上(没有显示任何内容),所以我可以澄清一下:您的意思是我在func datasourcediddupdate(dataSource:dataSource)下的接口控制器代码中输入了您编写的最后一个代码块(“if let…”和“titleLabel.setText(numberItem)等”)?如果我用此代码替换“switch”和“case”,或者如果我在数据源中手表的“init data”代码下添加了“titleLabel.setText(numberItem)”而无法识别标签,则会出现错误。非常感谢您,因为您的
datasourcediddupdate(DataSource:)
是一个枚举,而我的代码使用将传递给didReceiveApplicationContext
的字典。我将放弃使用枚举,因为您不再传递单个特定项。如果您希望保持与现在相同的设计,我想您可以将收到的字典传递给数据源,然后再将数据传递给用户ce将字典传递给接口控制器,以便它可以更新其标签。在这种情况下,我提供的代码将在datasourcediddupdate
中工作。值将完美地传递给Watch和enum类。太好了!!但是值尚未显示在Watch标签上(没有显示任何内容),那么我可以澄清一下:您的意思是我在func datasourcediddupdate(dataSource:dataSource)下的接口控制器代码中输入您编写的最后一个代码块(“if let…”和“titleLabel.setText(numberItem)等”)?如果用此代码替换“开关”和“案例”,则会出现错误。或者,如果我在数据源中手表的“init data”代码下添加“titleLabel.setText(numberItem)”则无法识别标签。非常感谢您,因为您的datasourcediddupdate(dataSource:)
是一个枚举,而我的代码使用的字典将传递给didReceiveApplicationContext
。我将放弃使用枚举,因为您不再传递单个特定项。如果希望保持与现在相同的设计,可以将收到的字典传递给数据源,然后让数据源将字典传递给接口控制器,以便它可以更新其标签。在这种情况下,我给出的代码将在datasourcediddupdate
中工作。