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物じゃない から。

NSValueViewType を最初の中に入れることができます。

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 に答える