一尘不染

NSUserDefaults在Watch OS2的Xcode beta上不起作用

swift

我刚刚安装了最新的Xcode Beta,以尝试 Swift 2 和对Apple Watch开发部分的改进。

我实际上很难弄清楚为什么这种基本NSUserDefaults方法无法在 iOSWatch OS2 之间共享信息。

我跟着一步一步的 教程来检查,如果我错过了在这个过程中的东西,如打开同一组的手机应用和扩展双方,但这里是我的了: 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可以利用不同的组…… 他们不共享信息而是 将其存储在本地。

有人有同样的问题吗?知道如何解决吗?


阅读 182

收藏
2020-07-07

共1个答案

一尘不染

使用watch OS2,您将无法再使用共享组容器。
苹果文档:

必须重新设计使用共享组容器与其iOS应用程序共享数据的Watch应用程序,以不同方式处理数据。在watchOS
2中,每个进程必须管理本地容器目录中任何共享数据的自己的副本。对于两个应用程序实际共享和更新的数据,这需要使用Watch
Connectivity框架在它们之间移动数据。

2020-07-07