作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在尝试将 iOS Siri Intent Extension 添加到我的应用程序中。主应用程序和扩展之间有一个共享类,在该类中它创建一个对象数组,然后使用 UserDefaults 根据需要保存/加载它们。这在主应用程序中工作正常,但是当扩展运行时它会抛出以下错误:
“无法读取数据,因为它的格式不正确。”
我在两者之间启用了应用组,并根据需要共享所有文件。我在这里和其他地方读到的所有内容都说它应该像这样简单,但我无法弄清楚为什么当它使用相同的类在两个地方加载/保存时数据格式错误。使用断点,我可以看到两个应用程序之间的数据对象大小相同,但如果我查看内容,它确实看起来不同。我还尝试使用 containerURL(forSecurityApplicationGroupIdentifier: "group.xxxx") 将数据存储到磁盘,但遇到了同样的问题。
感谢任何帮助!
var arrayOfObjects = [MyObject]()
func save() {
do {
guard let defaults: UserDefaults = UserDefaults(suiteName: "group.xxxx") else {
fatalError("Error loading user defaults")
}
let data = try NSKeyedArchiver.archivedData(withRootObject: arrayOfObjects, requiringSecureCoding: false)
defaults.set(data, forKey: "objects")
defaults.synchronize()
} catch {
print("Error: \(error.localizedDescription)")
}
}
func load() {
do {
guard let defaults: UserDefaults = UserDefaults(suiteName: "group.xxxx") else {
fatalError("Error loading user defaults")
}
if let data = defaults.data(forKey: "objects") {
guard let objectData = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as? [MyObject] else {
fatalError("Error reading data from archive")
}
arrayOfObjects = objectData
}
} catch {
print("Error: \(error.localizedDescription)")
}
}
最佳答案
我认为你不能 unarchiveTopLevelObjectWithData
是因为它们在不同的应用程序中。
您应该使用 JSON 格式字符串在您的应用和扩展程序之间共享数据。
关于ios - Swift iOS 意图扩展 : The data couldn't be read because it isn't in the correct format,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54948938/
我是一名优秀的程序员,十分优秀!