Я пытался добавить расширение 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)")
}
}