Swift 在UserDefaults中存储多个数组

Swift 在UserDefaults中存储多个数组,swift,nsuserdefaults,Swift,Nsuserdefaults,想知道是否可以在iOS UserDefaults存储中存储阵列。我有一个不同配置文件的屏幕,在订购过程中将用作预定义的输入。没有用户登录系统,因此我计划为此使用UserDefaults模块,而不是在线数据库存储 所需阵列: [ "Profile 1" : ["title" : "Ing.", "salutation" : "Herr", "fullname" : "Franz Bernstein Stiglitz"

想知道是否可以在iOS UserDefaults存储中存储阵列。我有一个不同配置文件的屏幕,在订购过程中将用作预定义的输入。没有用户登录系统,因此我计划为此使用UserDefaults模块,而不是在线数据库存储

所需阵列:

[
  "Profile 1" : ["title" : "Ing.",
                 "salutation" : "Herr",
                 "fullname" : "Franz Bernstein Stiglitz"
                 "phone" : "13001300",
                 "email" : "john2doe@example.com",
                ],
  "Profile 2" : ["title" : "Dr.",
                 "salutation" : "Herr",
                 "fullname" : "Joseph Keusch"
                 "phone" : "06606666800",
                 "email" : "jkeusch_1974@example.com",
                ],
]
我有这个带模型的结构,使用它,我可以在没有阵列逻辑的情况下存储为单个KVS

struct OrderingProfiles {

    static let (titleKey, salutationKey, fullnameKey, phoneKey, emailKey) = ("title", "salutation", "fullname", "phone", "email")
    static let userSessionKey = "com.save.usersession"

    struct OrderingProfile {
        var title: String?
        var salutation: String?
        var fullname: String?
        var phone: String?
        var email: String?

        init(_ json: [String: String]) {
            self.title = json[titleKey]
            self.salutation = json[salutationKey]
            self.fullname = json[fullnameKey]
            self.phone = json[phoneKey]
            self.email = json[emailKey]
        }
    }

    static var saveOrderingProfile = { (title: String, salutation: String, fullname: String, phone: String, email: String) in
        UserDefaults.standard.set([titleKey: title, salutationKey: salutation, fullnameKey: fullname, phoneKey: phone, emailKey: email], forKey: userSessionKey)
    }

    static var getOrderingProfile = { _ -> OrderingProfile in
        return OrderingProfile((UserDefaults.standard.value(forKey: userSessionKey) as? [String: String]) ?? [:])
    }(())

    static func clearUserData(){
        UserDefaults.standard.removeObject(forKey: userSessionKey)
    }

}

如果你的反应是这样的

[
      "Profile" : ["title" : "Ing.",
                     "salutation" : "Herr",
                     "fullname" : "Franz Bernstein Stiglitz"
                     "phone" : "13001300",
                     "email" : "john2doe@example.com",
                    ],
      "Profile" : ["title" : "Dr.",
                     "salutation" : "Herr",
                     "fullname" : "Joseph Keusch"
                     "phone" : "06606666800",
                     "email" : "jkeusch_1974@example.com",
                    ],
    ]
使用第三方模型映射尝试此代码 图书馆连结:-

1个模型班

2检索数据

var arrayProfile:[ProfileData] = []
let defaults = UserDefaults.standard
 guard let profile_data = defaults.object(forKey: "profile") as? NSData else {
            print("'profile' not found in UserDefaults")
                            return
        }
        guard let placesArray = NSKeyedUnarchiver.unarchiveObject(with: profile_data as Data) as? [ProfileData] else {
                            print("Could not unarchive from profile_data")
                            return
                        }

        for place in placesArray
        {
            arrayProfile.append(place)

        }

在我的例子中,100%工作时,最好尝试使用此

使您的结构可编码,并将json数据保存到应用程序首选项文件夹中的文件。要添加到Leo的评论中,UserDefaults不适用于应用程序数据。我明白,这是为了一些小事情,比如偏好。在这种情况下,您如何看待核心数据?取决于您有多少数据。@rmaddy我开始使用。它完全符合我的需要。虽然从技术上讲,这可能符合OP的要求;我之所以投反对票是为了将来的观众,因为这是滥用用户默认值。在iOS上本地存储数据有很多种方法,而保存为用户默认值并不是其中之一。我同意你的看法。但问题是在UserDefaults中存储多个数组,所以这就是我发布此答案的原因
var arrayProfile:[ProfileData] = []
var arrprofile:[ProfileModel] = []
let defaults = UserDefaults.standard

for data in arrprofile
{
 arrayProfile.append(data)
}

let saveProfileData = NSKeyedArchiver.archivedData(withRootObject: arrayProfile)
defaults.set(saveProfileData, forKey: "profile")
defaults.synchronize()
var arrayProfile:[ProfileData] = []
let defaults = UserDefaults.standard
 guard let profile_data = defaults.object(forKey: "profile") as? NSData else {
            print("'profile' not found in UserDefaults")
                            return
        }
        guard let placesArray = NSKeyedUnarchiver.unarchiveObject(with: profile_data as Data) as? [ProfileData] else {
                            print("Could not unarchive from profile_data")
                            return
                        }

        for place in placesArray
        {
            arrayProfile.append(place)

        }