Нет встроенной поддержки записи произвольного 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
сделает сохраненные списки нечитаемыми.
Другим большим недостатком является то, что строка @encode
не содержит никакой информации о заполнении структуры. Вы должны учитывать это при разборе строки. Я думаю, что вы можете использовать NSGetSizeAndAlignment
, чтобы помочь с этим.
Если вы хотите рискнуть своим здравомыслием и попробовать это, прочитайте раздел «Типовые кодировки» Objective-C Runtime Programming Guide .
Я рекомендую вам просто прикусить пулю и написать простую функцию, которая принимает GamePreset *
и возвращает NSDictionary *
, используя жестко запрограммированные знания структуры структуры.