繁体   English   中英

无法保存到plist

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM