我有自己的继承自NSObject
的对象类@interface BlockedCell : NSObject
{
NSValue *gridValue;
NSString *name;
}
@property (nonatomic, retain) NSValue *gridValue;
@property (nonatomic, retain) NSString *name;
@end
所以我尝试创建一些对象:
NSMutableDictionary *dict = [[dict alloc] init];
for (int i = 0; i < 5; ++i)
{
BlockedCell *block = [[BlockedCell alloc] init];
block.gridValue = [NSValue valueWithCGPoint: CGPointMake(0.0f, 0.0f)];
block.name = @"something";
[dict setObject: block forKey: [NSString stringWithFormat: @"item_%d", i]];
[block release];
}
if([dict writeToFile: path atomic: YES])
NSLog(@"Saved");
else
NSLog(@"Failed to save");
[dict release];
我得到的输出是“无法保存”.. 如果我的字典不包含任何数据,那么它将输出“已保存”
编辑: 在我做了更多测试之后,我发现实际上是导致保存失败的NSValue。 那么,如果我想将CGPoint保存到plist中,该怎么办?
答案 0 :(得分:2)
如您所见,属性列表无法直接存储NSValue
个对象。受支持的类是NSData,NSString,NSArray,NSDictionary,NSDate和NSNumber,如NSPropertyListSerialization Class Reference中所述。
最简单的解决方法是使用NSString
代替NSValue
:
block.gridString = NSStringFromCGPoint(CGPointZero);
CGPoint point = CGPointFromString(block.gridString);
答案 1 :(得分:1)
你不能直接保存NSValue。在你的情况下你必须以线下使用的形式保存一个点
CGPoint point = CGPointMake(10.0,20.0) //您需要将该点转换为兼容的“Plist”对象,例如NSString //幸运的是,有一种方法
[rectArray addObject:NSStringFromPoint(point)];
//保存到plist中 .....
检索此值
CGPoint Point = CGPointFromString([rectArray objectAtIndex:0]);