NSKeyedArchiver / NSuserDefaults - сохранение CGRect - PullRequest
8 голосов
/ 16 февраля 2010

В моем приложении пользователь может перетаскивать определенные элементы, такие как ползунки громкости и представления UIImage. Моя цель - сохранить расположение элементов, чтобы пользователю не приходилось перетаскивать элементы после повторного запуска. К сожалению, я видел ошибки при прохождении маршрута «сохранение CGRect rect = item.frame в NSuserDefaults или NSKeyedArchiver». Любые другие предложения?

Ответы [ 4 ]

18 голосов
/ 16 февраля 2010

Вы можете использовать NSStringFromgCGRect () и CGRectFromString () для их хранения.

11 голосов
/ 16 февраля 2010

Если вы используете архивирование с ключом на iPhone, UIKit специально поддерживает дополнение, которое выглядит следующим образом: -encodeCGRect:forKey: и выполняет именно то, что вы хотите. См. Документы Apple для дополнений USCit NSCoder .

Если вы используете NSUserDefaults, вы не можете позволить себе роскошь использовать явный кодировщик для CGRects, но, как говорят некоторые другие ответы, вы можете сохранить их как строки, используя NSStringFromCGRect() и наоборот.

0 голосов
/ 16 февраля 2010

Вы должны преобразовать числа с плавающей запятой в CGRect в NSNumbers и затем поместить их в словарь.

Если вам нужно хранить много CGRect, я рекомендую создать небольшой облегченный класс с элементами CGRect в качестве архивируемых атрибутов NSNumber. Создайте инициализатор, который принимает CGRect. Затем напишите быстрые методы протокола NSCoder, чтобы весь объект мог быть заархивирован

Таким образом, вы можете быстро и легко конвертировать, хранить и затем извлекать CGRects.

0 голосов
/ 16 февраля 2010

Вы, вероятно, закодируете CGRect, используя NSData, а затем сохраните NSData объект, используя NSUserDefaults или NSKeyedArchiver.

Я не уверен, на какие именно ошибки вы ссылаетесь в своем вопросе, может быть, требуется более подробное объяснение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...