WatchKit 应用程序丢失数据后去背景-Swift

标签: ios Swift
发布时间: 2017/3/6 23:02:23
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我到监视使用 (watchOS 2) 从我的 iPhone 通过字典 applicationContext 方法。

在 iPhone 应用程序︰

func giveMeInfo(){
    var lastStringUsed = porkee288.storyPoints.last!
    do {
        let resultDict = ["dict": myDict]
        try WCSession.defaultSession().updateApplicationContext(resultDict)
    }  
    catch {
        print("Something wrong happened")
    }
}

里面的监视应用程序︰

func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]) {

    dispatch_async(dispatch_get_main_queue()) { () -> Void in

        if let retrievedDict = applicationContext["dict"] as? [String : String] {

                self.dictInsideWatch = retrievedDict     
        }
    }
}

通过提取数据 tableviewwatchKit 很好,然而,每次应用程序转入后台运行,数据将自动丢失,这有点奇怪,因为在 iPhone 应用程序的字典都有一些持久性 (至少直到成为暂停)。

你会推荐什么来抵消这一问题并保持数据从消失呢?

解决方法 1:

你描述的问题是表不显示任何数据,一旦你返回到手表的应用程序。 虽然你没有显示该特定的代码,它可能是因为被空白在下次打开该应用程序的字典。

由于应用程序上下文只收到一次,任何财产观察员或您可能使用重新加载表的方法只会火时新到达的数据,恢复该应用程序时。

当你的字典是空白的时你可以求助于 receivedApplicationContext 属性访问最近收到你的表的数据。

字典,它包含从配对和活跃的设备接收的最后更新数据。(只读)

使用此方法访问最近收到更新词典。会话对象也将新到达的字典发送到会话︰ didReceiveApplicationContext︰ 其委托的方法。

你也可以坚持在词典 NSUserDefaults 来处理的情况,当您的应用程序已被终止,则暂停。

你没有证明你的叫 loadTable() 你曾有过的数据。 你肯定想要这样做,一旦你 (收到新数据或) 检索持久化的数据。

if !session.receivedApplicationContext.keys.isEmpty {
    // Use most recently received dictionary
    dictInsideWatch = receivedApplicationContext["dict"]
} else {
    // Use persisted dictionary
    dictInsideWatch = NSUserDefaults.standardUserDefaults().dictionaryForKey("dict") ?? [:]
}
loadTable()

如果您采用这种方法,一定要保留的数据 (立即收到后,或在点应用程序将要移动到非活动状态时)。

赞助商