我尝试使用NSUserdefaults编写一个小的测试应用程序来在iPhone和Watch之间进行通信。但在尝试了许多解决方案后,它仍然不起作用。所以我在这里发布了我的代码来寻求帮助。谢谢!
iPhone端:导入UIKit
类ViewController: UIViewController {
@IBOutlet var addLabel: UILabel!
var n : Int = 0
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func addBtn(sender: AnyObject) {
n++
addLabel.text = "\(n)"
}
@IBAction func sendBtn(sender: AnyObject) {
let mySharedDefaults = NSUserDefaults(suiteName: "group.com.sunyi.sharingdatasunyi")
mySharedDefaults?.setInteger(n, forKey: "savedUserInput")
mySharedDefaults?.synchronize()
}}
和观察端:导入WatchKit导入基础
类InterfaceController: WKInterfaceController {
@IBOutlet var myWatchLabel: WKInterfaceLabel!
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
// Configure interface objects here.
}
override func willActivate() {
// This method is called when watch view controller is about to be visible to user
super.willActivate()
}
override func didDeactivate() {
// This method is called when watch view controller is no longer visible
super.didDeactivate()
}
@IBAction func showBtn() {
let mySharedDefaults = NSUserDefaults(suiteName: "group.com.sunyi.sharingdatasunyi")
mySharedDefaults?.synchronize()
var a : Int = -1
a = mySharedDefaults!.integerForKey("savedUserInput")
self.myWatchLabel.setText("\(a)")
}}
我已经建立了应用程序组,ID是group.com.sunyi.sharingdatasunyi。项目名称为sharingdatasunyi。捆绑ID为com.sunyi.sharingdatasunyi。最后的结果是:无论我在手表端输入什么,在按下ShowButton on watch之后,标签总是显示0(不是-1,不是我的输入数字)。那么,我该怎么做呢?
非常感谢!
发布于 2015-12-17 06:30:43
您使用的是watchOS 1还是2?在watchOS 2上,你不能使用NSUserDefaults在手表和iPhone之间通信,即使它们使用的是共享组。您应该考虑使用WatchConnectivity和sendMessage在两个设备之间进行实时通信。
https://stackoverflow.com/questions/34317599
复制相似问题