Swift iOS 意图扩展:无法读取数据,因为它的格式不正确
Swift iOS Intent Extension: The data couldn't be read because it isn't in the correct format
我一直在尝试向我的应用添加 iOS Siri Intent 扩展。主应用程序和扩展程序之间有一个共享的 class,在该 class 中它创建了一个对象数组,然后根据需要使用 UserDefaults 来 save/load 它们。这在主应用程序中工作正常,但是当扩展是 运行 时它会抛出以下错误:
"The data couldn't be read because it isn't in the correct format."
我在两者之间启用了应用组,并根据需要共享所有文件。我在这里和其他地方读到的所有内容都说它应该如此简单,但我无法弄清楚为什么当数据使用相同的 class 到 load/save 时,数据格式会错误在这两个地方。使用断点,我可以看到两个应用程序之间的数据对象大小相同,但如果我查看内容,它确实看起来不同。我还尝试使用 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 Siri Intent 扩展。主应用程序和扩展程序之间有一个共享的 class,在该 class 中它创建了一个对象数组,然后根据需要使用 UserDefaults 来 save/load 它们。这在主应用程序中工作正常,但是当扩展是 运行 时它会抛出以下错误:
"The data couldn't be read because it isn't in the correct format."
我在两者之间启用了应用组,并根据需要共享所有文件。我在这里和其他地方读到的所有内容都说它应该如此简单,但我无法弄清楚为什么当数据使用相同的 class 到 load/save 时,数据格式会错误在这两个地方。使用断点,我可以看到两个应用程序之间的数据对象大小相同,但如果我查看内容,它确实看起来不同。我还尝试使用 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 格式字符串在您的应用和扩展程序之间共享数据。