とにかく、私は非常に環境に配慮した初心者です。次のように、NSLocaleクラスを使用して現地通貨を取得する方法を説明するチュートリアルを実行しています。
NSLocale *here = [NSLocale currentLocale];
NSString *currency = [here objectForKey:NSLocaleCountryCode];
NSLog(@"Money is %@", currency);
したがって、「here」というNSLocaleクラスのインスタンスを作成していることを理解し、「here」オブジェクトにobjectForKeyを要求するメッセージを送信すると、結果が「currency」というNSStringに返されます。最後に、NSLogを使用して通貨の値を出力します。
さて、これが私の質問です。次に、NSLocaleクラスにある他のメソッドを確認し、「preferredLanguages」という名前のメソッドを見つけました。これは、優先言語の配列を返します。だから私はそのメソッドを呼び出して、それをログに印刷しますが、ただニヤリと学びやすくするためです。上記の例から離れて、私はそれをこのように呼ぶだろうと思いました。上記のコードから「here」というNSLocaleクラスのインスタンスがすでにあるという事実から始めて、次のものが必要だと思いました(ここで読みやすいように、上記の3行を繰り返しています)。
NSLocale *here = [NSLocale currentLocale];
NSString *currency = [here objectForKey:NSLocaleCountryCode];
NSLog(@"Money is %@", currency);
NSArray *prefLangs = [here preferredLanguages];
NSLog(@"Preferred Languages are: %@", prefLangs);
しかし、それは機能しませんでした。「「NSLocale」の表示された@interfaceがセレクター「preferredLanguages」を宣言していません」というエラーメッセージが表示されました。
私は代わりにこの方法でそれをしなければならないことを理解しました:
NSLocale *here = [NSLocale currentLocale];
NSString *currency = [here objectForKey:NSLocaleCountryCode];
NSLog(@"Money is %@", currency);
NSArray *prefLangs = [NSLocale preferredLanguages];
NSLog(@"Preferred Languages are: %@", prefLangs);
[ここではpreferredLanguages]ではなく[NSLocalepreferredLanguages]のようなメソッドを呼び出さなければならなかった理由がわかりません。'here'のインスタンスはすでに上に作成されています。誰か説明してもらえますか?