[英]Can't save to plist
我有自己的对象类,继承自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];
我得到的输出是“ Failed to save”。如果我的词典不包含任何数据,则它将输出“ Saved”
编辑:经过更多测试后,我发现实际上是导致保存失败的NSValue。 那么,如果我想将CGPoint保存到plist中怎么办?
如您NSValue
,属性列表无法直接存储NSValue
对象。 受支持的类是NSData,NSString,NSArray,NSDictionary,NSDate和NSNumber,如NSPropertyListSerialization类参考中所述 。
最简单的解决方法是使用NSString
而不是NSValue
:
block.gridString = NSStringFromCGPoint(CGPointZero);
CGPoint point = CGPointFromString(block.gridString);
您不能直接保存NSValue。在这种情况下,您必须以字符串形式保存点
CGPoint point = CGPointMake(10.0,20.0)//您需要将点转换为兼容的“ Plist”对象,例如NSString ///幸运的是,有一种方法
[rectArray addObject:NSStringFromPoint(point)];
//保存到一个plist .....
在检索此值时
CGPoint Point = CGPointFromString([rectArray objectAtIndex:0]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.