Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UserDefaults能否在每次.synchronize()之后继续保存新数据?_Ios_Swift_Synchronization_Userdefaults - Fatal编程技术网

Ios UserDefaults能否在每次.synchronize()之后继续保存新数据?

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

我写了一个应用程序,包括一个主程序a和一个动作扩展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
中,您应该使用该数据的唯一键。另请阅读有关同步的内容:

因为此方法会定期自动调用, 仅当无法等待自动启动时,才使用此方法 同步(例如,如果应用程序即将退出)或 如果您想更新用户默认磁盘上的内容,即使 您没有做任何更改

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

用户
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>)