Хранение массива кортежей в NSUserDefault - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь сохранить массив кортежей в 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 но, похоже, ваш объект должен быть классом или структурой для этого;но это, кажется, не имеет смысла с моей конкретной структурой данных.

У кого-нибудь есть указатели?

...