Вы можете записать его как список свойств, но тогда вам нужно заменить ключи NSNumber, например, строками, а объекты NSValue должны быть «частью семейства». Это хороший вариант, если вы можете обойти эти требования и серьезно обдумать его.
Затем вы можете загрузить с помощью
dict = [NSDictionary dictionaryWithContentsOfURL...
и сохранить с помощью
[dict writeToUrl...
, что приятно, легко и без сложностей сегодняшнего NSSecureCoding.
В противном случае вам нужно углубиться в ключевой архиватор и убедиться, что все ключи и объекты реализуют NSCoding / NSSecureCoding. Даже здесь это может быстро превратиться в настоящую миссию, но это «нормальный» путь для словаря с настраиваемыми объектами. Изменить: если вы используете NSString и NSNumber, у вас не должно возникнуть проблем.
Однако, если у вас есть настраиваемые объекты, например, ваши значения - это какая-то странная вещь, которая не реализует NSCoding, тогда вы должны проконсультироваться с Archives and Serializations Руководство по программированию в docs. Вы можете указать go там в любом случае для любого из этих вариантов, но, может быть, сейчас проще всего первый?