作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个定义如下的结构:
typedef struct {
NSString *SportName;
NSInteger numberOfPeriods;
CFTimeInterval periodLength;
NSString *periodName;
CFTimeInterval secondaryClockTime;
NSString *LeftSecondaryCounterName;
NSString *RightSecondaryCounterName;
bool PossessionArrow;
} GamePreset;
是否可以将 GamePreset 类型的变量写入 plist 文件?
最佳答案
没有内置支持将任意 struct
编写为属性列表。您必须编写一个将结构转换为属性列表的方法。
理论上,您可以在运行时通过解析 @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
的任何更改' s 布局将使保存的 plists 不可读。
另一个很大的缺点是@encode
字符串没有任何关于结构填充的信息。解析字符串时必须考虑到它。我认为您可以使用 NSGetSizeAndAlignment
来帮助解决这个问题。
如果您想冒险尝试这个,请阅读 “Type Encodings” section of the Objective-C Runtime Programming Guide。
我建议您硬着头皮编写一个简单的函数,使用结构布局的硬编码知识获取 GamePreset *
并返回 NSDictionary *
。
关于iphone - iOS 5 : Is it possible to write a struct to a plist file?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9552952/
我是一名优秀的程序员,十分优秀!