[解決済み] NSUserDefaultsのキーとして定数NSStringを使用する。
2023-04-24 05:15:28
質問
NSUSerDefaults を使用して、ユーザーの設定を保存しています。キーを定数として設定することは良いアイデアであるとどこかで読んだことを覚えています。次のコードは、私が現在持っているものです。
[[NSUserDefaults standardUserDefaults]
setObject:[NSNumber numberWithInt:polygon.numberOfSides]
forKey:@"polygonNumberOfSides"];
に変えてみた。
@implementation Controller
NSString const *kPolygonNumberOfSides = @"polygonNumberOfSides";
-(void)savePolygonInfo {
[[NSUserDefaults standardUserDefaults]
setObject:[NSNumber numberWithInt:polygon.numberOfSides]
forKey:kPolygonNumberOfSides];
}
これは動作しますが、" を生成します。
warning: passing argument 1 of 'objectForKey:' discards qualifiers from pointer target type
を生成します。私は、自分のコードをコンパイラの警告から守りたいのです。どうすればこの警告を修正できますか?
どのように解決するのですか?
を使用する必要があります。
NSString * const kPolygonNumberOfSides = @"..."; // const pointer
の代わりに
NSString const * kPolygonNumberOfSides = @"..."; // pointer to const
はNSStringオブジェクトへの定数ポインタであり、2番目は定数NSStringオブジェクトへのポインタである。
微妙な違いです。コンパイラの警告が起こるのは
setObject:forKey:
が以下のように宣言されているからです。
- (void)setObject:(id)value forKey:(NSString *)defaultName;
これは
defaultName
引数は
NSString *
. 代わりに定数へのポインタを渡すと、別のものを与えたことになります。
更新してください。
これらの定数は、以下のように定義されるべきであることを指摘しておきたいと思います。
static
として定義されるべきであると指摘したいと思います。もし、staticとして宣言しないなら、それらはグローバルな名前空間に存在することになり、他のファイルで同じ名前の変数を使用することができなくなるからです。
Objective-Cの定数
を参照してください。例で説明すると、私が現在使用しているのは、1つの
.m
ファイルで使用する必要があります。
static NSString * const kSomeLabel = @"...";
関連
-
[解決済み】Xcode - 'NSUnknownKeyException', reason: ... this class is not key value coding-compliant for the key X" エラーの修正方法とは?
-
[解決済み] UITextViewのキーボードをリターンキーで解除するには?
-
[解決済み】NSUserDefaultsに文字列を保存しますか?
-
[解決済み】NSUserDefaults - キーが存在するかどうかを判断する方法
-
[解決済み] NSUserDefaultsにNSDateを格納する最適な方法は何ですか?
-
[解決済み] error: Writeable atomic property cannot pair with synthesized setter/getter and the user defined setter/getter.
-
[解決済み] NSObject +loadと+initialize - これらは何をするのですか?
-
[解決済み] switch文の中で変数を宣言する [重複]。
-
[解決済み] 警告 "format が文字列リテラルでなく、format の引数がない場合"
-
[解決済み] Objective-CでQueueを作成し、使用するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Objective-Cの定数
-
[解決済み] NSObject +loadと+initialize - これらは何をするのですか?
-
[解決済み] 2つの日付の差を計算するにはどうすればよいですか?
-
[解決済み] インスタンスメッセージの受信型'CALayer'は前方宣言である」とはどういう意味か?
-
[解決済み] switch文の中で変数を宣言する [重複]。
-
[解決済み] AppDelegateからストーリーボード上の異なる場所で条件付きで開始する。
-
[解決済み] IOS: 角の丸いUIImageまたはUIImageViewを作成する
-
[解決済み] NSIntegerをint型に変換するには?
-
[解決済み] フォーマット文字列, 先頭のゼロを含む整数
-
[解決済み] ARCはディスパッチキューをサポートしていますか?