保存为UserDefaults时,应用程序总是崩溃

时间:2018-10-06 12:40:59

标签: ios swift

我完全不知道出什么问题了:

extension UserDefaults {

    static let shared = UserDefaults(suiteName: SharedGroupName)!

    static func set(object: Any, forKey key: String) {

        shared.set(object, forKey: key)
        shared.synchronize()
    }
}

enter image description here

5 个答案:

答案 0 :(得分:3)

You should try omitting the static variable and just use:

UserDefaults(suiteName: SharedGroupName)!.set(object, forKey: key)

It might make a difference. Also, as said in one of the comments, "synchronize" is not needed.

答案 1 :(得分:2)

我已经重新创建了完全相同的源代码,并且没有崩溃,我认为崩溃是由于您提供的示例文件之外的某些原因引起的。您可以添加更多可能将数据传递给扩展程序的代码吗?

答案 2 :(得分:1)

只需声明共享为可选。

static var shared: UserDefaults? = UserDefaults(suiteName: SharedGroupName)

答案 3 :(得分:0)

extension UserDefaults {

    static let shared = UserDefaults(suiteName: SharedGroupName! as String)

    static func set(object: Any, forKey key: String) {

        shared?.set(object, forKey: key)
        // shared?.synchronize()  obsolete
    }
}
  1. 解开SharedGroupName!作为字符串
  2. 使用可选的“?”与共享将运行您的代码很好

答案 4 :(得分:0)

  • 确定要使用非默认UserDefault并使用特定的suiteName吗?

如果答案是肯定的,并且原因是您正在使用窗口小部件扩展,请确保主应用程序目标和窗口小部件扩展目标都启用了应用程序组功能,并使用并激活了该功能(必须选中复选标记)应用组名称。

如果答案是否定的,则将init替换为suiteName并使用默认的初始化程序。

  • 强制展开SharedGroupName!而且像这样的演员在我看来并不正确。

static let shared = UserDefaults(suiteName: SharedGroupName! as String)

能否请您尝试直接传递SharedGroupName的字符串值?