在NSUserDefaults中保存typedef枚举对象

sum*_*mon 7 enums objective-c

我写了以下代码:

typedef enum {
    kProductList,
    kProductGrid,
    kProductSingleView
} ProductViewType;

ProductViewType ViewType;
Run Code Online (Sandbox Code Playgroud)

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

我写了以下代码:

[[NSUserDefaults standardUserDefaults] setObject:ViewType forKey:@"ProductViewType"];
Run Code Online (Sandbox Code Playgroud)

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

任何解决方案 谢谢.

Ste*_*ton 18

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

没试过这个,但你可以通过以下改变逃脱:

[[NSUserDefaults standardUserDefaults] setObject:@(ViewType) forKey:@"ProductViewType"];
Run Code Online (Sandbox Code Playgroud)

@()符号是短手[NSNumber numberWithInt:viewType].

  • 我建议你的代码只有三个额外的字符,其中没有一个是方括号,所以我认为我的代码不太可能导致你的错误. (6认同)

The*_*mer 1

因为它ViewType不是一个物体。

您可以将 ViewType 放在NSValue第一个中。

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