Нет, нет возможности чтобы поместить NSNull
в список свойств. (Интересный факт: формат двоичного списка свойств на самом деле поддерживает значения NULL, но средство записи не реализует поддержку.)
Для словаря самый простой обходной путь - просто отфильтровать значения NULL, поэтому {foo = "bar"; baz = ноль; } становится {foo = "bar"; }.
Из документации NSPropertyListSerializationClass:
Объект списка свойств. plist должен быть разновидность NSData, NSString, NSNumber, NSDate, NSArray или NSDictionary объект. Объекты-контейнеры также должны содержат только такие объекты.
Так что вам нужен один из них. В зависимости от типа данных вы можете вставить заполнитель вместо NSNull, а затем выполнить процесс до / после загрузки .plist (например, используя объект NSData нулевой длины для представления вашего NSNull в plist). Какой именно заполнитель будет зависеть от того, какие данные вы храните, и от выбора того, чего следует избегать. Затем после загрузки преобразуйте пустые NSData обратно в NSNull.
Вместо использования списка свойств рассмотрите возможность использования NSKeyedArchiver и NSKeyedUnarchiver. Списки свойств имеют фиксированный набор типов, в который не входит NSNull, и он не предназначен для расширения.
Вот ссылки на соответствующую документацию: NSCoding , NSKeyedArchiver и NSKeyedUnarchiver .