在NSUserDefaults中保存typedef枚举对象

时间:2012-11-29 11:35:19

标签: objective-c enums

我写了以下代码:

typedef enum {
    kProductList,
    kProductGrid,
    kProductSingleView
} ProductViewType;

ProductViewType ViewType;

在我的视图更改方法中,我正在更改ViewType。当应用程序关闭时,我想将最后一个ViewType保存在UserDefauls中,这样当第一次加载时,我可以检查用户上次的ViewType并将其设置为默认值。

我写了以下代码:

[[NSUserDefaults standardUserDefaults] setObject:ViewType forKey:@"ProductViewType"];

但XCode显示警告:指向整数转换的指针不兼容。

任何解决方案?感谢。

4 个答案:

答案 0 :(得分:18)

NSUserDefaults存储对象而不是C数据类型。

没有试过这个,但你可能只能做出以下改变:

[[NSUserDefaults standardUserDefaults] setObject:@(ViewType) forKey:@"ProductViewType"];

@()符号是[NSNumber numberWithInt:viewType]的简写。

答案 1 :(得分:3)

如上所述here NSUserDefaults'setObject:forKey:方法只接受对象。由于枚举类型不是对象,因此无法使用此方法进行设置。由于默认情况下枚举基本上是整数,因此您可以使用setInteger:forKey:方法来存储您的值。

答案 2 :(得分:1)

因为ViewType不是对象。

您可以先将ViewType放在NSValue内。

NSValue *value = [NSValue value:&ViewType withObjCType:@encode(ProductViewType)];
[[NSUserDefaults standardUserDefaults] setObject:value forKey:@"ProductViewType"];

答案 3 :(得分:1)

枚举是整数,setObject需要对象!!!

将此枚举封装在对象中(可以是NSValue或eve自定义类)。然后将其写入UserDefaults。

或者如果您使用的是XCode4,

[[NSUserDefaults standardUserDefaults] setObject:@(ViewType) forKey:@"ProductViewType"];