我刚刚安装了最新的Xcode Beta,以尝试 Swift 2 和对Apple Watch开发部分的改进。
我实际上很难弄清楚为什么这种基本NSUserDefaults方法无法在 iOS 和 Watch OS2 之间共享信息。
NSUserDefaults
我跟着这 一步一步的 教程来检查,如果我错过了在这个过程中的东西,如打开同一组的手机应用和扩展双方,但这里是我的了: NOTHING 。
这是我在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可以利用不同的组…… 他们不共享信息 , 而是 将其存储在本地。
有人有同样的问题吗?知道如何解决吗?
使用watch OS2,您将无法再使用共享组容器。 苹果文档:
必须重新设计使用共享组容器与其iOS应用程序共享数据的Watch应用程序,以不同方式处理数据。在watchOS 2中,每个进程必须管理本地容器目录中任何共享数据的自己的副本。对于两个应用程序实际共享和更新的数据,这需要使用Watch Connectivity框架在它们之间移动数据。