ios - UserDefaults 可以在每次 .synchronize() 之后继续保存新数据吗?

标签 ios swift synchronization userdefaults

我写了一个应用程序,包括一个主程序 A 和一个 Action 扩展 B。

用户可以使用操作扩展 B 将一些数据保存到 UserDefaults 中。 像这样:

let defaults = UserDefaults(suiteName: "group.com.ZeKai")
    defaults?.set(self.doubanID, forKey: "doubanID")
    defaults?.set(self.doubanRating, forKey: "doubanRating")
    defaults?.set(self.imdbRating, forKey: "imdbRating")
    defaults?.set(self.rottenTomatoesRating, forKey: "rottenTomatoesRating")
    defaults?.set(self.chineseTitle, forKey: "chineseTitle")
    defaults?.set(self.originalTitle, forKey: "originalTitle")
    defaults?.synchronize()

等待在 A 打开时将此数据传输到主程序 A。

但是如果我两次使用action extension来保存data1和data2这样的数据,然后我打开主程序A,A只接收到data2,意味着总是新数据覆盖UserDefaults中的新数据。

那么,我想知道是否可以在UserDefaults中保存多个数据,它们会全部转移到主程序A中?

提前致谢...

最佳答案

要将多个数据保存到 UserDefaults,您应该为该数据使用唯一键。另请阅读有关同步的信息:

Because this method is automatically invoked at periodic intervals, use this method only if you cannot wait for the automatic synchronization (for example, if your application is about to exit) or if you want to update the user defaults to what is on disk even though you have not made any changes.

如果数据如您所描述的那样是描述性的。尝试使用结构来表示模型。

用户结构的例子:

public struct User {

    public var name: String

    init(name: String) {
        self.name = name
    }

    public init(dictionary: Dictionary<String, AnyObject>){
        name = (dictionary["name"] as? String)!
    }

    public func encode() -> Dictionary<String, AnyObject> {
        var dictionary : Dictionary = Dictionary<String, AnyObject>()
        dictionary["name"] = name as AnyObject?
        return dictionary
    }

}

结构和UserDefaults的使用。

let user1 = User(name: "ZeKai").encode()
let user2 = User(name: "Oleg").encode()

let defaults = UserDefaults(suiteName: "User")
defaults?.set(user1, forKey: "User1")
defaults?.set(user2, forKey: "User2")
defaults?.synchronize()

let user1EncodeData = defaults?.dictionary(forKey: "User1")        
let user = User(dictionary: user1EncodeData as! Dictionary<String, AnyObject>)

关于ios - UserDefaults 可以在每次 .synchronize() 之后继续保存新数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43584882/

相关文章:

ios - 如何在Swift中上传个人资料图片

swift - 以编程方式设置 UITextField 占位符颜色

ios - 如何在类上设置 Realm PrimaryKey "sub-property"

c# - 使用什么对象类型/实例进行同步

ios - 如何在 iOS 应用程序中发送文本?

ios - Safari Mobile/iOS 上的模糊比例

ios - UIImageView 不会保留正方形。

ios - 如何以编程方式移动 UIButton?

javascript - console.log 的非 volatile 替代品

java - 我如何测试阻塞队列实现的同步