Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过多个字典/多个';应用程序更新';通过swift 2.2手表连接_Swift_Watchos 2_Watchconnectivity_Wcsession - Fatal编程技术网

如何通过多个字典/多个';应用程序更新';通过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
中工作。