我使用NSCoder将持久数据存储在我的应用程序中,如下所示:
class UserNotification: NSObject, NSCoding {
var message: String!
init(message: String) {
self.message = message
}
required convenience init(coder aDecoder: NSCoder) {
let message = aDecoder.decodeObject(forKey: "message") as! String
self.init(message: message)
}
func encode(with aCoder: NSCoder) {
aCoder.encode(message, forKey: "message")
}
}
这是他们加载到应用程序中的方式:
let defaults = UserDefaults.standard
if (defaults.object(forKey: "userNotifications") != nil) {
let decoded = defaults.object(forKey: "userNotifications") as! Data
let decodedUserNotifications = NSKeyedUnarchiver.unarchiveObject(with: decoded as Data) as! [UserNotification]
userNotifications = decodedUserNotifications
}
我还为用户提供了一种清除所有已保存数据的方法。为了清算,我实施了:
let newListData = NSKeyedArchiver.archivedData(withRootObject: userNotifications)
let defaults = UserDefaults.standard
defaults.set(newListData, forKey: "userNotifications")
defaults.synchronize()
所有用户通知对象都存储在全局可访问的数组中:
userNotifications = [UserNotification]()
我想确保在用户清除后删除所有持久数据。我正在查看我的模拟器(〜/ Library / Developer / CoreSimulator / Devices)的文件夹,以便找到持久数据并查看它是否被删除,但我还没有设法在任何地方找到它。
在运行应用程序(保存数据,删除数据等)时,一切似乎都有效,但我想确保所有数据在设备上正确擦除。有一些缩略图被保存,因此我想确保它真的被删除,而不是占用不必要的空间。
所以我的问题是在使用NSCoder时存储数据的位置?我能够使用FileManager找到本地存储的图像,但无法找到编码数据。