将对象添加到字典(而不是字典只保留最近的对象)Swift

Add objects to Dictionary (instead of Dictionary only keeping most recent object) Swift

我正在(从iOS)传递一些数据(colors),但是当我在另一端(WatchKit)收到数据(colors)时只显示最近的一个字典项目


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: