Ios UserDefaults能否在每次.synchronize()之后继续保存新数据?
我写了一个应用程序,包括一个主程序a和一个动作扩展B 用户可以使用操作扩展B将一些数据保存到UserDefaults中。 像这样:Ios UserDefaults能否在每次.synchronize()之后继续保存新数据?,ios,swift,synchronization,userdefaults,Ios,Swift,Synchronization,Userdefaults,我写了一个应用程序,包括一个主程序a和一个动作扩展B 用户可以使用操作扩展B将一些数据保存到UserDefaults中。 像这样: let defaults = UserDefaults(suiteName: "group.com.ZeKai") defaults?.set(self.doubanID, forKey: "doubanID") defaults?.set(self.doubanRating, forKey: "doubanRating") defaults
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
中,您应该使用该数据的唯一键。另请阅读有关同步的内容:
因为此方法会定期自动调用,
仅当无法等待自动启动时,才使用此方法
同步(例如,如果应用程序即将退出)或
如果您想更新用户默认磁盘上的内容,即使
您没有做任何更改
如果数据是描述性的,如您所述。尝试使用结构来表示模型
用户struct
的示例:
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
}
}
@ZeKai you WailcomeCalling
synchronize()
不再需要:“等待对默认数据库的任何挂起的异步更新并返回;此方法是不必要的,不应使用。”
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>)