2

私はスタンドフォード CS193P のレッスン、特にレクチャー n°7 を見ています。について疑問がありNSUserDefaultsます。これはコードの一部です:

#define FAVORITES_KEY @"CalculatorGraphViewController.Favorites"

- (IBAction)addToFavorites:(id)sender
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSMutableArray *favorites = [[defaults objectForKey:FAVORITES_KEY] mutableCopy];
    if (!favorites) favorites = [NSMutableArray array];
    [favorites addObject:self.calculatorProgram];
    [defaults setObject:favorites forKey:FAVORITES_KEY];
    [defaults synchronize];
}

に関するドキュメントを読みましたNSUserDefaultsが、特にこのコードがわかりません[[defaults objectForKey:FAVORITES_KEY] mutableCopy]FAVORITES_KEYです@"CalculatorGraphViewController.Favorites"

私の質問は、なぜ使用する必要があるのCalculatorGraphViewController.Favoritesですか? ドットがわかりません!ゲッターやセッターの構造のように思えますが、Favorites には大文字があり、CalculatorGraphViewController.Favorites は意味がありません。

お願いできますか?

4

3 に答える 3

2

あなたはそれをNSDictionaryと考えることができます、そしてあなたが提供する鍵はあなた自身の参照のためだけです。後で値を取得するためのものです。@"CalculatorGraphViewController.Favorites"のような文字列、またはその他の任意の文字列と呼ぶことができます。彼らは、これがCalculatorGraphViewControllerに記録されたお気に入りの選択肢の値であることを識別するためにこのように名前を付けていると私は信じています。

于 2012-10-14T14:31:27.563 に答える
1

他の人が指摘したように、キーは任意の文字列です。問題は、アプリの多くの部分がデフォルトに書き込まれる可能性があることです。「お気に入り」などの非常に単純なものをキーとして選択した場合、アプリの 2 つの部分が同じキーを異なるものに使用しようとする可能性が非常に高くなります。(好きなアーティストや好きな曲など)

これはプログラミングにおける一般的な問題であり、通常は名前空間、または衝突の可能性を低くする何らかの種類のプレフィックスを導入することで解決されます。のような Java クラスの名前空間をよく見かけますcom.someguy.AppName.SomeClassName。またはドメイン名でも -developer.facebook.comdeveloper.apple.com. どちらも「開発者」という用語を使用していますが、どちらも名前空間が異なります (com.facebookcom.apple)。

ユースケースで同じソリューションを使用して、名前空間をデフォルト キーに導入できます。同じ名前の 2 つのクラスが存在する可能性は低いため、名前空間の論理的な選択はクラス名です。CalculatorGraphViewControllerしたがって、プレフィックスに到達します。ドットは、名前空間内のコンポーネントを区切る慣習的な方法です。

于 2012-10-14T14:43:48.777 に答える
0

これは単なるキーであり、任意の文字列またはオブジェクトにすることができますが、nilはできません。

于 2012-10-14T14:32:43.413 に答える