【发布时间】:2015-08-31 08:03:46
【问题描述】:
我刚刚安装了最新的 Xcode 测试版来试用 Swift 2 以及对 Apple Watch 开发部分所做的改进。
我实际上很难弄清楚为什么这种在 iOS 和 Watch OS2 之间共享信息的基本 NSUserDefaults 方法不起作用。
我关注this step-by-step tutorial 以检查我是否在此过程中遗漏了某些内容,例如为电话应用程序和分机打开同一个组,但这是我得到的:NOTHING。 p>
这是我在 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 使用了不同的组......他们不共享信息,他们将信息存储在本地。
有人遇到同样的问题吗?知道如何解决吗?
【问题讨论】:
-
请在问题中包含您的代码,以免损坏的链接不会使该问题对未来的读者毫无用处。
-
.stringForKey("shared") 已经返回了一个不需要转换的字符串。您应该使用 nil 合并运算符来解开它 name_data = NSUSerDefaults().stringForKey("shared") ?? “没有价值”
-
问题肯定出在其他地方。您拥有的代码是正确的;我在我的 3 个手表应用程序中多次使用这种模式。我认为这不会有帮助,但请尝试将 NSUserDefaults 调用移动到您的数据源,以便您从一个地方获取 NSUserDefaults 引用,而不是初始化它的 2 个不同副本。
-
我会在标题中添加 xcode 7 / watch OS2。
-
对于那些感兴趣的人,即使在 watchOS 2 中,设置仍会从 iOS 推送到 Apple Watch。请参阅我的回答 stackoverflow.com/a/32707727/630614
标签: swift operating-system nsuserdefaults watchkit watchos-2