Руководство по программированию кодирования значения ключа, кажется, указывает, что мне нужно сохранить их как NSValues.
Нет, вам нужно NSValue, чтобы передать точку или прямоугольник в setValue:forKey:
,В документах KVC нигде не говорится о сохранении значений, поскольку это не является частью KVC.И вы не можете сохранить NSValue в списке свойств, поскольку он не входит в список свойств классов.
Итак, вам нужно преобразовать прямоугольник в один из следующих объектов:типы данных списка свойств.Я предпочитаю преобразовывать их в и из строк, что вы можете сделать с некоторыми функциями в UIKit .
Это на самом деле структуры Core Graphics, а не UIKit (отсюда и имена CG Point и CG Rect), поэтому можно ожидать, что Core Graphics будет иметь функции для этого.Это действительно так, но другого рода: в CGGeometry Core Graphics предоставляет функции для преобразования CGPoints и CGRects в словари и из них.
Строки или словари: это ваш выбор.Что бы вы ни выбрали, они являются списками свойств, поэтому вы можете сохранить их в выводе списка свойств.
При получении преобразовать словарь или строку в точку или прямоугольник и создать NSValue с этим чтобы перейти к setValue:forKey:
.Конечно, это работает наоборот: при сохранении valueForKey:
даст вам NSValue, из которого вам нужно извлечь точку или прямоугольник, чтобы преобразовать его в словарь или строку для сохранения в plist.