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

时间:2012-03-04 06:45:59

标签: iphone ios file struct plist

我有一个由以下定义的结构:

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

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

1 个答案:

答案 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}}。