Я пытаюсь сохранить массив кортежей в NSUserDefaults
, чтобы мое расширение для общего доступа и основное приложение iOS могли получить доступ к этой же конкретной структуре данных.
Массив выглядит так:
var contentEntries: Array<(Link: String, Note: String)> = []
В расширении я добавляю элементы в массив следующим образом:
contentEntries.append((url.absoluteString!, commentText!))
И, пытаясь кодироватьв качестве данных, используя NSKeyedArchiver
перед сохранением в систему по умолчанию:
let encodedData = NSKeyedArchiver.archivedData(withRootObject: self.pinchContentEntries)
self.userDefaults?.set(encodedData, forKey: self.userDefaultsKey)
self.userDefaults?.synchronize()
На стороне приложения я планировал, чтобы следующий код получил хранимую переменную и разархивировал ее:
let data = userDefaults?.object(forKey: userDefaultsKey)
extensionEntries = NSKeyedUnarchiver.unarchiveObject(with: (data! as! NSData) as Data) as! Array<(Link: String, Note: String)>
Из некоторых других вопросов ( encodeWithCoder: нераспознанный селектор, отправленный на экземпляр ), ( encodeWithCoder: нераспознанный селектор, отправленный на экземпляр ), можно обойти это, используя NSCodable
но, похоже, ваш объект должен быть классом или структурой для этого;но это, кажется, не имеет смысла с моей конкретной структурой данных.
У кого-нибудь есть указатели?