我有一个由以下定义的结构:
typedef struct {
NSString *SportName;
NSInteger numberOfPeriods;
CFTimeInterval periodLength;
NSString *periodName;
CFTimeInterval secondaryClockTime;
NSString *LeftSecondaryCounterName;
NSString *RightSecondaryCounterName;
bool PossessionArrow;
} GamePreset;
是否可以将类型为GamePreset的变量写入plist文件?
答案 0 :(得分:2)
没有内置支持将任意struct
写为属性列表。您必须编写一个将结构转换为属性列表的方法。
理论上,您可以通过解析@encode(GamePreset)
的结果在运行时执行此操作,GamePreset
的结果(在编译时)由描述NSLog(@"encode = %s", @encode(GamePreset));
...
2012-03-04 00:57:43.456 encodetest[43337:903] encode = {?=@qd@d@@B}
的字符串替换:
struct
这有严重的缺点。一个是你没有获得字段名称,所以除非读者知道struct
格式,否则你的plist将不会特别有用,并且对@encode
布局的任何更改都会使保存的plist不可读。
另一个重大缺点是GamePreset *
字符串没有任何有关结构填充的信息。解析字符串时必须考虑到它。我想你可以使用NSGetSizeAndAlignment
来帮助解决这个问题。
如果您想冒犯自己的理智并尝试此操作,请阅读“Type Encodings” section of the Objective-C Runtime Programming Guide。
我建议你咬紧牙关并编写一个简单的函数,它使用NSDictionary *
并使用结构布局的硬编码知识返回{{1}}。