Ios WatchKit应用程序在进入后台后丢失数据-Swift

Ios WatchKit应用程序在进入后台后丢失数据-Swift,ios,swift,watchkit,apple-watch,watchos-2,Ios,Swift,Watchkit,Apple Watch,Watchos 2,我正在使用(watchOS 2)applicationContext方法将字典从我的iPhone传递到手表 iPhone应用程序内部: func giveMeInfo(){ var lastStringUsed = porkee288.storyPoints.last! do { let resultDict = ["dict": myDict] try WCSession.defaultSession().updateApplicationCon

我正在使用(watchOS 2)
applicationContext
方法将字典从我的iPhone传递到手表

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     
        }
    }
}
手表应用程序内部:

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     
        }
    }
}
数据是通过
watchKit
中的
tableview
很好地获取的,但是,每次应用程序进入后台,数据都会自动丢失,这很奇怪,因为在iPhone应用程序中,字典有一些持久性(至少在挂起之前)


您建议采取什么措施来解决此问题并防止数据消失?

您所描述的问题是,一旦您返回watch应用程序,表中就不会显示任何数据。虽然您没有显示特定的代码,但很可能是因为下次打开应用程序时字典为空

由于应用程序上下文只接收一次,因此您可能用于重新加载表的任何属性观察者或方法都只会在数据新到达时触发,而不会在应用程序恢复时触发

当字典为空时,可以使用该属性访问表的最新接收数据

包含从配对的活动设备接收的上次更新数据的字典。(只读)

使用此方法访问最近收到的更新字典。会话对象还向其委托的session: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()
如果采用这种方法,请确保保存数据(在收到数据后立即保存,或者在应用程序即将移动到非活动状态时保存)