将CGRect存储到plist时出现问题

时间:2011-05-04 16:51:56

标签: objective-c cocoa-touch ios plist cgrect

我正在尝试保存包含CGRect值的数组。我知道plist与CGRect类型不兼容,所以我稍微修改了我的代码,现在我存储NSNumber而不是存储rect值 - 我将rect值拆分为四个值: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中,但我无法将值加载回来。如果我的代码出错了,任何人都可以纠正我吗?

提前致谢;我在等你的宝贵信息。

2 个答案:

答案 0 :(得分:17)

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]);

答案 1 :(得分:0)

您提供的代码看起来是正确的。您的问题可能在其他地方。它可能在加载代码中,或者在保存代码中的其他位置,但您还没有发布任何其他内容,因此我无法确定问题所在。

如果您愿意为了简单起见,可以尝试使用johnoodles方法,但这可能会创建更大的plist文件,并且还需要更长的时间来存储和检索。如果你存储相对较少数量的rects,它可能不是问题,但如果你要存储很多,你可能会注意到如果存储为实际数字会延迟更短。