7

我写了以下代码:

typedef enum {
    kProductList,
    kProductGrid,
    kProductSingleView
} ProductViewType;

ProductViewType ViewType;

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

我写了以下代码:

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

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

任何解决方案?谢谢。

4

4 回答 4

18

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

没有尝试过,但您可能只需进行以下更改即可逃脱:

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

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

于 2012-11-29T11:41:12.050 回答
3

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

于 2012-11-29T11:40:44.153 回答
1

因为ViewType不是对象。

你可以把 ViewType 放在NSValue第一个里面。

NSValue *value = [NSValue value:&ViewType withObjCType:@encode(ProductViewType)];
[[NSUserDefaults standardUserDefaults] setObject:value forKey:@"ProductViewType"];
于 2012-11-29T11:37:10.010 回答
1

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

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

或者,如果您使用的是 XCode4,

[[NSUserDefaults standardUserDefaults] setObject:@(ViewType) forKey:@"ProductViewType"];
于 2012-11-29T11:37:37.317 回答