swift - 未调用 WatchKit didReceiveApplicationContext

标签 swift watchkit xcode7 watchos-2

无法调用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/

相关文章:

ios - 使用 Swift 4.0.3 编译的模块无法被 Swift 4.2.1 编译器导入

swift - 层变换矩阵(CATransform3D 等)但带有 IBDesignable?

ios - 音频播放错误-XCODE 7(Swift 2.0)

Swift:使用高阶函数过滤字典数组

ios - 初始初始化后添加/编辑 pod 文件 "firebase"

watchkit - HKWorkoutSession 没有将应用程序放在 Apple Watch 前面

ios - 将 WKInterfaceController 滚动回顶部

Xcode UI 测试 - UI 测试失败 - 当点击搜索字段 "Cancel' 按钮时无法滚动到可见(通过 AX 操作)

ios - XCode6/swift : unrecognized selector sent to instance

ios - 使 SwiftyUserDefaults 数组可供 iOS 和 watchOS 应用程序访问