gpt4 book ai didi

swift - 未调用 WatchKit didReceiveApplicationContext

转载 作者:可可西里 更新时间:2023-10-31 23:56:04 25 4
gpt4 key购买 nike

无法调用didReceiveApplicationContext。有什么想法吗?

接口(interface) Controller :

import WatchKit
import Foundation
import WatchConnectivity

class InterfaceController: WKInterfaceController, WCSessionDelegate {

@IBOutlet var colorLabel: WKInterfaceLabel!

private let session: WCSession? = WCSession.isSupported() ? WCSession.defaultSession() : nil

override init() {
super.init()
session?.delegate = self
session?.activateSession()
}

override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
}

func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]){
let colors : String = applicationContext["color"] as! String
colorLabel.setText(colors)
NSLog("session did receive application context")
}

}

我一直在关注本教程:http://www.kristinathai.com/watchos-2-how-to-communicate-between-devices-using-watch-connectivity/

没有 NSLogcolorLabel 的设置发生。不知道我错过了什么。谢谢!

最佳答案

这似乎是一个典型的“开发阶段”问题!

WCSession.defaultSession.applicationContextiOS 设备上被缓冲,所以它只传输到watch(扩展名)一次,如果它没有改变。

这导致奇怪的发现,当 WCSession.defaultSession.updateApplicationContext 在 iOS 应用程序中再次调用时, watch 扩展 'didReveiveApplicationContext:' 似乎没有被调用. (尝试在扩展中调用 WSSession.defaultSession.receivedApplicationContext 发现,之前传输的上下文实际上是可用的)!

测试情况中,将“changer”对象添加到上下文字典中非常有帮助(例如 UUID 对象,或者 - 甚至更好 - NSDate 。日期)。这将确保上下文已更改(与缓冲的上下文相比)并再次传输(导致调用 didReceiveApplicationContext):-)

NSError*    error = nil;
[WCSession.defaultSession updateApplicationContext:@{ @"yourKey" : @"your content",
@"forceTransfer" : NSDate.date }
error:&error];

并且:不要忘记在您的应用程序的生产版本中删除它,因为 - 当然 - 这会导致您的应用程序和 watch 扩展程序之间进行不必要的数据传输!

PS:选中的答案通过创建一个新应用解决了这个问题。并以这种方式刷新所有缓冲区...

关于swift - 未调用 WatchKit didReceiveApplicationContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32802894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com