Как сериализировать Список NSDictionary/NSArray/Property (plist), который содержит NSNull

Можно всегда возвращаться к старому доброму (c)

12
задан David H 22 October 2013 в 18:42
поделиться

3 ответа

Нет, нет возможности чтобы поместить NSNull в список свойств. (Интересный факт: формат двоичного списка свойств на самом деле поддерживает значения NULL, но средство записи не реализует поддержку.)

Для словаря самый простой обходной путь - просто отфильтровать значения NULL, поэтому {foo = "bar"; baz = ноль; } становится {foo = "bar"; }.

5
ответ дан 2 December 2019 в 04:53
поделиться

Из документации NSPropertyListSerializationClass:

Объект списка свойств. plist должен быть разновидность NSData, NSString, NSNumber, NSDate, NSArray или NSDictionary объект. Объекты-контейнеры также должны содержат только такие объекты.

Так что вам нужен один из них. В зависимости от типа данных вы можете вставить заполнитель вместо NSNull, а затем выполнить процесс до / после загрузки .plist (например, используя объект NSData нулевой длины для представления вашего NSNull в plist). Какой именно заполнитель будет зависеть от того, какие данные вы храните, и от выбора того, чего следует избегать. Затем после загрузки преобразуйте пустые NSData обратно в NSNull.

3
ответ дан 2 December 2019 в 04:53
поделиться

Вместо использования списка свойств рассмотрите возможность использования NSKeyedArchiver и NSKeyedUnarchiver. Списки свойств имеют фиксированный набор типов, в который не входит NSNull, и он не предназначен для расширения.

Вот ссылки на соответствующую документацию: NSCoding , NSKeyedArchiver и NSKeyedUnarchiver .

9
ответ дан 2 December 2019 в 04:53
поделиться