【问题标题】:Save typedef enum objects in NSUserDefaults在 NSUserDefaults 中保存 typedef 枚举对象
【发布时间】:2012-11-17 11:23:08
【问题描述】:

我写了以下代码:

typedef enum {
    kProductList,
    kProductGrid,
    kProductSingleView
} ProductViewType;

ProductViewType ViewType;

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

我写了以下代码:

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

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

任何解决方案?谢谢。

【问题讨论】:

    标签: objective-c enums


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      @() 表示法是 [NSNumber numberWithInt:viewType] 的简写。

      【讨论】:

      • 我写了你的代码,但是 XCode 显示错误:extraneous "]" before ";"
      • 无论如何,感谢您的信息,我已经完成了一些手动整数值来检查状态并解决了我的问题。
      • 我建议您的代码只增加三个额外的字符,它们都不是方括号,所以我认为我的代码不太可能导致您的错误。
      • 这对我有用。不错的速记,我不知道。
      • @iAhmed 使用integerForKey: 方法。
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        因为ViewType 不是对象。

        您可以先将 ViewType 放入 NSValue 中。

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

        【讨论】:

        • 您的代码运行,但是当我打印 ProductViewType 时,它​​打印的是 (ViewType),而不是视图值。我不知道为什么,但谢谢。我现在正在使用一些静态整数值跟踪视图类型。
        • +value:withObjCType: 将被弃用,而应使用 +valueWithBytes:objCType:。除此之外,NSUserDefaults 不接受 NSValue 对象(不再接受?),只接受 NSData、NSString、NSNumber、NSDate、NSArray 或 NSDictionary。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-28
        • 2015-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多