我刚刚安装了最新的Xcode beta版本,以尝试 Swift 2 和改进的苹果手表开发部分。
实际上,我很难理解为什么这个基本的NSUserDefaults
方法在iOS和Watch OS2之间共享信息时不起作用。
我按照这个一步一步的教程进行操作,检查我是否在过程中遗漏了某些步骤,例如在手机应用程序和扩展程序上同时启用相同的组,但这是我得到的结果:什么也没有。
以下是我为iPhone应用程序的ViewController编写的内容:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var lb_testo: UITextField!
let shared_defaults:NSUserDefaults = NSUserDefaults(suiteName: "group.saracanducci.test")!
var name_data:NSString? = ""
override func viewDidLoad() {
super.viewDidLoad()
name_data = shared_defaults.stringForKey("shared")
lb_testo.text = name_data as? String
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@IBAction func upgrade_name(sender: AnyObject) {
name_data = lb_testo.text
shared_defaults.setObject(name_data, forKey: "shared")
lb_testo.resignFirstResponder()
shared_defaults.synchronize()
}
}
这是我在WatchKit的InterfaceController中拥有的内容:
import WatchKit
import Foundation
class InterfaceController: WKInterfaceController {
@IBOutlet var lb_nome: WKInterfaceLabel!
let shared_defaults:NSUserDefaults = NSUserDefaults(suiteName: "group.saracanducci.test")!
var name_data:NSString? = ""
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
}
override func willActivate() {
super.willActivate()
if (shared_defaults.stringForKey("shared") != ""){
name_data = shared_defaults.stringForKey("shared")
lb_nome.setText(name_data as? String)
}else{
lb_nome.setText("No Value")
}
}
override func didDeactivate() {
super.didDeactivate()
}
}
我进行了一些测试,似乎iOS应用程序和Watch OS应用程序利用不同的组......它们不共享信息,而是在本地存储。
有人遇到同样的问题吗?有什么解决办法吗?