Привязки какао, строковое значение в значениях по умолчанию, привязанных к текстовому полю.Как я могу программно прочитать эту строку? - PullRequest
0 голосов
/ 13 октября 2018

У меня есть привязка какао между UserDefaults и TextField настройкой через IB:

enter image description here

Это прекрасно работает при каждом запускеприложение TextField сохранит свое значение

Однако я также хочу программно прочитать это строковое значение в других местах кода.Я пытался в основном все UserDefaults.standard звонки:

guard let supplierData = UserDefaults.standard.data(forKey: "singleSupplierDownloadName") else {return}

returns: ▿ 145 bytes
  - count : 145   ▿ pointer : 0x0000608000187ae0
    - pointerValue : 106102873684704

UserDefaults.standard.string(forKey:) возвращает nil

object(forKey:) возвращает это:

▿ Optional<Any>
  - some : <62706c69 73743030 d4010203 04050609 0a582476 65727369 6f6e5824 6f626a65 63747359 24617263 68697665 72542474 6f701200 0186a0a2 07085524 6e756c6c 57746573 74696e67 5f100f4e 534b6579 65644172 63686976 6572d10b 0c54726f 6f748001 08111a23 2d32373a 40485a5d 62000000 00000001 01000000 00000000 0d000000 00000000 00000000 00000000 64>

УчитываяЯ решил попробовать что-то сделать с Data, полученным с помощью data(forKey:)

(lldb) po String(data: supplierData, encoding: .ascii)
▿ Optional<String>
  - some : "bplist00Ô\u{01}\u{02}\u{03}\u{04}\u{05}\u{06}\t\nX$versionX$objectsY$archiverT$top\u{12}\0\u{01} ¢\u{07}\u{08}U$nullWtesting_\u{10}\u{0F}NSKeyedArchiverÑ\u{0B}\u{0C}Troot\u{01}\u{08}\u{11}\u{1A}#-27:@HZ]b\0\0\0\0\0\0\u{01}\u{01}\0\0\0\0\0\0\0\r\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0d"

. Я поиграл с разными кодировщиками, и все это было бесполезно.Пока я не использовал ascii, вы можете видеть, что там есть подсказки на английском языке: «NSKeyedArchiver», «unarchiver» и т. Д. Заставили меня поверить, что эти данные на самом деле являются не просто строкой, а сжатой строкой (в архиве)

тогда я подумал, что, может быть, мне нужно инициализировать NSKeyedUnarchiver,

(lldb) po NSKeyedUnarchiver(forReadingWith: supplierData)
<NSKeyedUnarchiver: 0x60800010beb0>

Но оттуда ... Я не знаю, что делать.Все, что я спрашиваю из NSKeyedUnarchiver, возвращает nil

Я на правильном пути?

Как я могу прочитать это строковое значение, хранящееся в Shared User Defaults Controller, через какаоНаручники

1 Ответ

0 голосов
/ 13 октября 2018

Исправление не заключалось в использовании NSKeyedUnarchiveFromData в качестве преобразователя значения в привязке (или вообще в любом преобразователе значения).

Когда вы используете преобразователь значения, это заставляет систему привязки преобразовывать значениеиз представления в какое-то другое значение для модели, чтобы сохранить и, когда она извлекает значение из модели, преобразовать его в значение, с которым представление может работать.В вашем случае текстовое поле естественным образом работает со строковыми значениями, как и система по умолчанию пользователя, поэтому нет необходимости или выгоды в преобразовании в / из объектов данных.

Основное использование для преобразования через NSKeyedUnarchiveFromData - этодля значений типов, которые не могут быть напрямую сохранены в списках свойств, таких как цветные объекты.

...