Iphone iOS 5:是否可以将结构写入plist文件?

Iphone iOS 5:是否可以将结构写入plist文件?,iphone,ios,file,struct,plist,Iphone,Ios,File,Struct,Plist,我有一个定义如下的结构: typedef struct { NSString *SportName; NSInteger numberOfPeriods; CFTimeInterval periodLength; NSString *periodName; CFTimeInterval secondaryClockTime; NSString *LeftSecondaryCounterName; NSString *RightSeconda

我有一个定义如下的结构:

typedef struct {
    NSString *SportName;
    NSInteger numberOfPeriods;
    CFTimeInterval periodLength;
    NSString *periodName;
    CFTimeInterval secondaryClockTime;
    NSString *LeftSecondaryCounterName;
    NSString *RightSecondaryCounterName;
    bool PossessionArrow;
} GamePreset;

是否可以将GamePreset类型的变量写入plist文件?

不支持将任意
结构写入属性列表。您必须编写一个将结构转换为属性列表的方法

理论上,您可以在运行时解析
@encode(GamePreset)
的结果,该结果(在编译时)被一个描述
GamePreset
的字符串替换:

NSLog(@"encode = %s", @encode(GamePreset));
...
2012-03-04 00:57:43.456 encodetest[43337:903] encode = {?=@qd@d@@B}
这有严重的缺点。一个是你没有得到字段名,因此你的plist不会特别有用,除非读者知道
struct
格式,并且对
struct
布局的任何更改都会使保存的plist无法读取

另一个大缺点是
@encode
字符串没有任何关于结构填充的信息。在解析字符串时,必须对其进行解释。我想你可以用它来帮忙

如果你想拿自己的理智冒险,试试这个,请阅读


我建议您咬紧牙关,编写一个简单的函数,使用结构布局的硬编码知识获取一个
GamePreset*
,并返回一个
NSDictionary*

看起来将其编码为字符串的难度大约是从GamePreset编写
-(NSDictionary*)词典的10倍:(GamePreset)NewGamePreset
命令…哦,好吧。