NSCoder не может декодировать объект во второй раз, если объект уже был успешно декодирован. ⇐ IOS
-
Anonymous
NSCoder не может декодировать объект во второй раз, если объект уже был успешно декодирован.
Я использую NSSecureCoding для кодирования/декодирования некоторых объектов и в процессе тестирования нескольких способов разархивирования объекта заметил, что удаление некоторых операторов печати изменило поведение декодера. Объект NSCoder «уничтожается» при удалении объекта? Это ожидаемое поведение?
До
Например, этот FakeObject хранится в "FakeObjectKey". Если я попытаюсь декодировать его тремя разными способами и распечатать результат, он будет следующим.
print("FakeObject существует? \(coder.containsValue(forKey: "FakeObjectKey"))")) print("FakeObject небезопасен? \(coder.decodeObject(forKey: "FakeObjectKey"))")) print("FakeObject защищен? \(coder.decodeObject(of: FakeObject.self, forKey: "FakeObjectKey"))")) Вывод, где кажется, что он работает, а затем дважды дает сбой:
FakeStorekeeper существует? истинный FakeStorekeeper небезопасен? ноль FakeStorekeeper безопасен? ноль После Но если я закомментирую первые два оператора печати, вы увидите, что третий метод действительно успешен:
// print("FakeObject существует? \(coder.containsValue(forKey: "FakeObjectKey"))")) // print("FakeObject небезопасен? \(coder.decodeObject(forKey: "FakeObjectKey"))")) print("FakeObject защищен? \(coder.decodeObject(of: FakeObject.self, forKey: "FakeObjectKey"))")) Изменения вывода:
FakeObject безопасен? Необязательно (< FakeObject: 0x60000022a180>)
Я использую NSSecureCoding для кодирования/декодирования некоторых объектов и в процессе тестирования нескольких способов разархивирования объекта заметил, что удаление некоторых операторов печати изменило поведение декодера. Объект NSCoder «уничтожается» при удалении объекта? Это ожидаемое поведение?
До
Например, этот FakeObject хранится в "FakeObjectKey". Если я попытаюсь декодировать его тремя разными способами и распечатать результат, он будет следующим.
print("FakeObject существует? \(coder.containsValue(forKey: "FakeObjectKey"))")) print("FakeObject небезопасен? \(coder.decodeObject(forKey: "FakeObjectKey"))")) print("FakeObject защищен? \(coder.decodeObject(of: FakeObject.self, forKey: "FakeObjectKey"))")) Вывод, где кажется, что он работает, а затем дважды дает сбой:
FakeStorekeeper существует? истинный FakeStorekeeper небезопасен? ноль FakeStorekeeper безопасен? ноль После Но если я закомментирую первые два оператора печати, вы увидите, что третий метод действительно успешен:
// print("FakeObject существует? \(coder.containsValue(forKey: "FakeObjectKey"))")) // print("FakeObject небезопасен? \(coder.decodeObject(forKey: "FakeObjectKey"))")) print("FakeObject защищен? \(coder.decodeObject(of: FakeObject.self, forKey: "FakeObjectKey"))")) Изменения вывода:
FakeObject безопасен? Необязательно (< FakeObject: 0x60000022a180>)
Мобильная версия