要将数据从我的IOS应用程序传递到我的Watch应用程序,我将数据缓存到我的iOS AppDelegate中的NSUserDefaults(在应用程序组中)。 (我在didFinishLaunching和willTerminate中都称这种方法。)
然后,我通过应用程序组将此数据传递给我的Watch应用程序,一切正常。
问题在于,当我更改iPhone应用程序上的数据时,我也希望更新Watch App上的数据,但除非我卸载并重新安装Watch App,否则它不会更新。
我已经在awakeWithContext和willActivate中尝试从App Groups方法获取,但数据仍然是陈旧的。如何在卸载/重新安装时刷新Watch上的数据?
*编辑:换句话说,Apple Watch应用程序显然一直在手表上运行...而我更希望它被杀死,以便当用户更改iPhone应用程序上的数据时,然后点击手表应用程序它会打开新数据,而不是仅仅使用陈旧数据唤醒。
class InterfaceController: WKInterfaceController {
var nameList: [String]?
var currentUserName: String?
var peopleDict: [String : [String : [String : String]]]?
@IBOutlet weak var personTable: WKInterfaceTable!
private func loadTableData() {
if let list = nameList {
personTable.setNumberOfRows(list.count, withRowType: "PersonTableRowController")
for (index, personName) in enumerate(list) {
if let row = personTable.rowControllerAtIndex(index) as? PersonTableRowController {
row.personLabel.setText(personName)
} else { println("Could not cast as PersonTableRowController") }
}
}
}
func fetchFromAppGroup() {
let defaults = NSUserDefaults(suiteName: "group.com.myndarc.thredz2")
defaults?.synchronize()
if let fetchedPeopleDict: AnyObject = defaults?.valueForKey("peopleDict") {
//save peopleDict locally
peopleDict = fetchedPeopleDict as? [String : [String : [String : String]]]
if let dict = fetchedPeopleDict as? NSDictionary {
nameList = dict.allKeys as? [String]
}
}
if let user: AnyObject = defaults?.valueForKey("currentUser") {
currentUserName = user as? String
}
}
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
}
override func willActivate() {
super.willActivate()
fetchFromAppGroup()
loadTableData()
}