Swift iOS Intent 扩展:无法读取数据,因为它的格式不正确
Posted
技术标签:
【中文标题】Swift iOS Intent 扩展:无法读取数据,因为它的格式不正确【英文标题】:Swift iOS Intent Extension: The data couldn't be read because it isn't in the correct format 【发布时间】:2019-03-01 16:43:45 【问题描述】:我一直在尝试将 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)")
【问题讨论】:
【参考方案1】:我认为你不能unarchiveTopLevelObjectWithData
是因为它们在不同的应用程序中。
您应该使用 JSON 格式字符串在您的应用和扩展程序之间共享数据。
【讨论】:
知道了,我可以看到。我一直在使用 NSKeyedArchiver,所以我只是希望不要重写它,但 JSON 至少还不错:) 谢谢!以上是关于Swift iOS Intent 扩展:无法读取数据,因为它的格式不正确的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Swift 中使用网络扩展框架 iOS 8 设置 *** 连接
无法从 onActivityReenter 中的 Intent 读取 Parcelable
Swift Extension 计算变量在协议中声明之前无法正确读取
iOS 10 - Swift 仍然通知 CloudKit:应用程序未启动,在 didFinishLaunchingWithOptions 之后读取通知