2012-03-04 70 views
2

我有一個結構的定義如下:iOS 5:是否可以將一個結構寫入plist文件?

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

是否可以寫類型GamePreset變量的plist文件?

回答

2

沒有內置支持來編寫任意struct作爲屬性列表。您必須編寫一個將結構轉換爲屬性列表的方法。

在理論上,你可以在運行時通過描述GamePreset字符串解析的@encode(GamePreset)的結果,這是替換(在編譯時)做到這一點:

NSLog(@"encode = %s", @encode(GamePreset)); 
... 
2012-03-04 00:57:43.456 encodetest[43337:903] encode = {[email protected]@[email protected]@B} 

這有嚴重的缺點。一個是你沒有得到字段名稱,所以你的plist不會特別有用,除非讀者知道struct格式,並且任何對struct佈局的更改都會使保存的plists不可讀。

另一個很大的缺點是@encode字符串沒有關於結構填充的任何信息。解析字符串時必須考慮它。我想你可以用NSGetSizeAndAlignment來幫忙。

如果您想要冒風險並嘗試此操作,請閱讀「Type Encodings」 section of the Objective-C Runtime Programming Guide

我建議你只是咬緊牙關,寫一個簡單的函數,它需要一個GamePreset *並返回一個NSDictionary *使用結構佈局的硬編碼知識。

+0

看起來像編碼爲一個字符串將**約10倍**只要寫一個' - (NSDictionary *)DictionaryFromGamePreset:(GamePreset)NewGamePreset'命令...噢。 – Itoqixer 2012-03-04 11:13:01