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 格式字符串在您的应用和扩展程序之间共享数据。