当前位置: 首页 > 面试题库 >

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

祖利
2023-03-14
问题内容

我刚刚安装了最新的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可以利用不同的组…… 他们不共享信息而是 将其存储在本地。

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


问题答案:

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

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



 类似资料:
  • 问题内容: 我之前已经做过,但似乎没有任何效果。这是我的代码: 在iOS应用中保存 阅读(在iOS上运行,但在WatchOS 2上不行) 这两个.entitlements文件包含 group.company.appSharedDefaults 应用组功能已打开,并且两个目标上的相应组均已选中。 现在,当我在watch objectForKey上运行读取的代码时,返回nil,但它在iOS上有效(设备

  • 问题内容: 我正在尝试使用NSUserDefaults将数组保存到我的应用程序的核心数据中。我认为使用NSUserDefaults会很好,但是问题是,无论我将创建默认代码的代码放在哪里,都会引发SIGABRT错误。 这是创建默认值的代码: levelsArray是List对象的数组: 如何阻止SIGABRT弹出并存储阵列。帮助将不胜感激。 问题答案: 您需要先使用NSKeyedArchiver将其

  • 我有一种字体在IE8和IE9以及所有其他浏览器中都能正常工作,但第二种字体只在IE9和其他浏览器中工作。在IE8中,我得到了一个错误: “CSS3111:@font-face遇到未知错误。” 我一直在四处看书,尝试了很多事情,但都没有运气。 我的代码是: 我试过用几个不同的生成器多次重新生成eot,玩过CSS,玩过头,玩过域,等等,但是看起来它们都很好。如前所述,相同的代码在相同的,只是指向不同的

  • 我实现了spring Security3.2.5,但不幸的是@preauthorize不能用于类和方法。正如我从文档中读到的,@preauthorize应该允许方法和类工作,如果用户在注释中有指定的角色,但我能够运行所有方法或类,而没有任何角色差异。您可以看到security-config.xml和security.context.xml以及我在下面声明@preauthorize注释的类。如果你能

  • 问题内容: 我正在尝试使形状的动画随着样本大小的增加(从100增加到1000)而呈指数分布。还有一个滑块,用于配置发行版的lambda参数,以及一个用于启动动画的按钮。 我的问题是,即使布局得到渲染,当我按下开始按钮时也没有动画发生。到目前为止,这是我的尝试: 为了简化起见,我在Python笔记本中运行它: 问题答案: 您应该注意函数的名称空间。 考虑 因此,您需要处理实际对象,而不是它们的某些本

  • 我的代码没有验证select。怎么了?。这个问题的解决方案是什么?很抱歉我的英语不好,非常感谢你的回答 这是我的表格 我的Javacript 忽略它:Lorem ipsum dolor sit amet,奉献精英。毛里斯·塞德·里索斯和莫利斯·迪克特。在faucibus中,Interdum和malesuada在第一次同侧前就出名了。我是一个爱的人。我是帕特·泰勒斯,我是康格·奈克。南阿罗特鲁姆尼斯