KVC: Как сохранить структуры UIKit в plist? - PullRequest
0 голосов
/ 31 августа 2010

Я использую KVC для установки свойств объектов из plist. Я знаю, что могу сохранить их как строки <string>{{66, 114}, {64, 64}}</string> и вручную преобразовать в структуры, но как я могу сохранить, например, CGPoint или CGRect в листе так, чтобы Cocoa KVC мог их понять? Руководство по программированию кодирования значения ключа *1003*, кажется, указывает, что мне нужно сохранить их как NSValue s. Как?

1 Ответ

3 голосов
/ 31 августа 2010

Руководство по программированию кодирования значения ключа, кажется, указывает, что мне нужно сохранить их как 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.

...