gpt4 book ai didi

ios - NSUserDefaults 不使用共享扩展保存到磁盘

转载 作者:行者123 更新时间:2023-11-28 07:00:23 25 4
gpt4 key购买 nike

我正在尝试将数据保存到 NSUserDefaults 以供以后与共享扩展一起使用。但是,当我重新打开应用程序时,数据永远不会保存。同样,我的扩展无法检索任何数据

我有一个名为 AppUser 的单例类,它有一个用户名属性。如果我设置

AppUser.username = "Bob"

然后运行 ​​saveAppData()

class func saveAppData() {

let data = NSKeyedArchiver.archivedDataWithRootObject(AppUser.singleton)
var sharedDefaults = NSUserDefaults(suiteName: "group.ca.mycompany.myapp")
sharedDefaults!.setObject(data, forKey: "AppUser")
sharedDefaults!.synchronize()
}

关闭应用程序并重新打开

class func loadAppData() {

var sharedDefaults = NSUserDefaults(suiteName: "group.ca.mycompany.myapp")

if let data = sharedDefaults!.objectForKey("AppUser") as? NSData {
println("Unarchived file succesfully")
NSKeyedUnarchiver.unarchiveObjectWithData(data) //should throw all the data into the AppUser.singleton class
println("Username is: \(AppUser.singleton.username)")
}
}

当我在应用程序重新打开后运行 loadAppData() 时,我在控制台中看到以下行:

Unarchived file succesfully
Username is nil

即使我运行了 setObject 和 sychronize,为什么用户名返回为 nil?

注意:我在我的应用程序中将“suitName”正确设置为“group.ca.mycompany.myapp”。我为我的应用程序和扩展程序启用了应用程序组作为“group.ca.mycompany.myapp”。

最佳答案

因此,您似乎没有将未存档的“数据”内容保存到对象中,这是您将未存档的数据内容保存到字符串数组的示例:

let data = NSKeyedArchiver.archivedDataWithRootObject(["asdf", "asdf"])
var sharedDefaults = NSUserDefaults(suiteName: "group.ca.mycompany.myapp")
sharedDefaults!.setObject(data, forKey: "AppUser")
sharedDefaults!.synchronize()

println(sharedDefaults!.valueForKey("AppUser"))

var sharedDefaults1 = NSUserDefaults(suiteName: "group.ca.mycompany.myapp")

if let data = sharedDefaults1!.objectForKey("AppUser") as? NSData {
println("Unarchived file succesfully")
let something = NSKeyedUnarchiver.unarchiveObjectWithData(data) as? [String] //should throw all the data into the AppUser.singleton class
println("Username is: \(something)")
}

这提供了以下信息:

Optional(<62706c69 73743030 d4010203 0405081a 1b542474 6f705824 6f626a65 63747358 24766572 73696f6e 59246172 63686976 6572d106 0754726f 6f748001 a5090a11 12135524 6e756c6c d20b0c0d 0e562463 6c617373 5a4e532e 6f626a65 63747380 04a20f10 80028003 54617364 66546173 6466d214 15161958 24636c61 73736573 5a24636c 6173736e 616d65a2 1718574e 53417272 6179584e 534f626a 65637457 4e534172 72617912 000186a0 5f100f4e 534b6579 65644172 63686976 65720811 161f2832 353a3c42 484d545f 61646668 6d727780 8b8e969f a7ac0000 00000000 01010000 00000000 001c0000 00000000 00000000 00000000 00be>)

Unarchived file succesfully Username is: Optional(["asdf", "asdf"])

这里的区别是我将未归档的内容保存到“某物”:

let something = NSKeyedUnarchiver.unarchiveObjectWithData(data) as? [String]

因此,“某物”就像是您的单例类的代理。

为了让这对你有用,这里有另一个实现:

let data = NSKeyedArchiver.archivedDataWithRootObject(["asdf", "asdf"])
var sharedDefaults = NSUserDefaults(suiteName: "group.ca.mycompany.myapp")
sharedDefaults!.setObject(data, forKey: "AppUser")
sharedDefaults!.synchronize()

var sharedDefaults1 = NSUserDefaults(suiteName: "group.ca.mycompany.myapp")

if let data = sharedDefaults1!.objectForKey("AppUser") as? NSData {
println("Unarchived file succesfully")
let something = NSKeyedUnarchiver.unarchiveObjectWithData(data) as! [String] //should throw all the data into the AppUser.singleton class
println(something[0])
}

这个新的实现打印出这个:

asdf

这意味着您可以将这个未归档的数据保存到一个对象中,然后轻松地将这个对象存储到您的 AppUser.singleton 中,只要您正确设置了 AppUser 模型类。

关于ios - NSUserDefaults 不使用共享扩展保存到磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32193662/

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