gpt4 book ai didi

swift - 在 UserDefaults 中保存自定义对象数组时出现 NSInvalidArgumentException

转载 作者:行者123 更新时间:2023-11-30 11:45:30 24 4
gpt4 key购买 nike

我想在我的 UserDefaults 中保存一个对象数组

let thisAction = action(ts: String(Date().timeStamp()), winner: winner)
actions.append(thisAction)
UserDefaults.standard.set(actions, forKey: "currentMatch")
UserDefaults.standard.synchronize()

但我有以下错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to insert non-property list object

最佳答案

尝试 Objective-C 对象(NSArray、NSDictionary)。
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/UserDefaults/AccessingPreferenceValues/AccessingPreferenceValues.html#//apple_ref/doc/uid/10000059i-CH3-97383 .

说明可以保存、获取NSData、NSDate、NSString、NSNumber、NSArray、NSDictionary、NSURL类型的对象。

因此,一个可能的解决方案是:

struct Action { var timestamp: TimeInterval; var winner: String }

var actions: [Action] = []

...
actions.map({ ["time": $0.timestamp, "winner": $0.winner ] as NSDictionary })
// You could also convert the actions manually one by one into NSDictionary
// and append them to an [NSDictionary]



UserDefaults.standard.set(actions as NSArray, forKey: "currentMatch")
UserDefaults.standard.synchronize()

Swift 数组和字典可以分别桥接NSArrayNSDictionary

您还可以使用 Codable,它也可以序列化属性列表。

关于swift - 在 UserDefaults 中保存自定义对象数组时出现 NSInvalidArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48875235/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com