我想为Apple手表制作一个测试应用程序,您可以在手机上设置一些String,然后它将显示在Apple Watch上.我决定使用NSUserDefaults类来存储这些数据.
在我的iPhone视图控制器中,我有一个方法,它将输入和存储带入本地存储:
- (IBAction)saveInfo:(id)sender {
NSString *userInput = [myTextField text];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:userInput forKey:@"savedUserInput"];
[defaults synchronize];
self.myLabel.text = [defaults stringForKey:@"savedUserInput"];
}
Run Code Online (Sandbox Code Playgroud)
在我的监视接口控制器中,我有一个检索数据并显示它的方法:
- (IBAction)showText2 {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults synchronize];
self.myLabel2.text = [defaults stringForKey:@"savedUserInput"];
}
Run Code Online (Sandbox Code Playgroud)
除了某些原因,我试图检索的数据显示为null,标签没有更新.
我刚刚安装了最新的Xcode测试版来试用Swift 2以及Apple Watch开发部分的改进.
我实际上很难搞清楚为什么这种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()
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我在WatchKit的InterfaceController中所拥有的:
import WatchKit
import …Run Code Online (Sandbox Code Playgroud)