Проблема при сохранении CGRect в plist

Я пытаюсь сохранить массив, содержащий значения CGRect. Я знаю, что списки несовместимы с типом CGRect, поэтому я немного изменил свой код и теперь сохраняю NSNumber вместо сохранения прямоугольного значения — я разделил прямоугольное значение на четыре значения: x, y, ширина, высота.

[myArray1 addObject:[NSNumber numberWithFloat:CGRectGetMinX(rawRect)]];
[myArray1 addObject:[NSNumber numberWithFloat:CGRectGetMinY(rawRect)]];
[myArray1 addObject:[NSNumber numberWithFloat:CGRectGetWidth(rawRect)]];
[myArray1 addObject:[NSNumber numberWithFloat:CGRectGetHeight(rawRect)]];

Теперь myArray1 содержит только NSNumber, и я пытаюсь сохранить эти значения в plist, но не могу загрузить значения обратно. Может ли кто-нибудь исправить меня, если я делаю что-то не так с моим кодом?

Заранее спасибо; Жду вашей ценной информации.


person ajay    schedule 04.05.2011    source источник


Ответы (2)


CGRect rect  = CGRectMake(0, 0, 320.0f, 480.0f);
//you need to translate the rect into a compatible "Plist" object such as NSString
//luckily, there is a method for that

[rectArray addObject:NSStringFromRect(rect)];

//save into a plist


...

при получении этого значения

CGRect rect = CGRectFromString([rectArray objectAtIndex:0]);
person johnoodles    schedule 04.05.2011

Код, который вы представили, выглядит правильно. Ваша проблема скорее всего в другом. Это может быть в коде загрузки или где-то еще в коде сохранения, но вы ничего больше не опубликовали, поэтому я не могу быть уверен, в чем проблема.

Вы можете попробовать подход johnoodles, если хотите, для простоты, но это, вероятно, создаст файл plist большего размера, а также займет больше времени для хранения и извлечения. Если вы храните относительно небольшое количество прямоугольников, это, вероятно, не проблема, но если вы храните много, вы можете заметить задержку, которая была бы намного короче, если бы вы хранили как фактические числа.

person Ed Marty    schedule 04.05.2011