-5

デフォルトの設定方法に関するチュートリアルを見たばかりで、デフォルトの値をテキストに出力することについて疑問に思っていました。私の質問は、if ステートメントでデフォルトを使用できますか? 私はこれで試しました:

-(IBAction)press {
cruzia.hidden = 0;
textarea.hidden = 0;
if ([defaults stringForKey:kMusic]) == YES {
    CFBundleRef mainBundle = CFBundleGetMainBundle();
    CFURLRef soundFileURLRef;
    soundFileURLRef =CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"click", CFSTR ("wav"), NULL);
    UInt32 soundID;
    AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
    AudioServicesPlaySystemSound(soundID);

しかし、うまくいきませんでした。「宣言されていない識別子「デフォルト」の使用」と「期待される式」と書かれていましたが、コードを「デフォルト」の宣言の下に移動しようとしましたが、違いはありませんでした。どなたか回答いただけると幸いです!

4

2 に答える 2

2

デフォルトを に置き換え[NSUserDefaults standardUserDefaults]ます。しかし、文字列を返すように求めている場合、それをブール値と比較することはできません。setBool:forKey:ただし、およびを使用して、ブール値を userDefaults に格納できます。boolForKey:

于 2013-07-10T00:43:38.357 に答える
2

上記のコードには多くの問題があります。まず、if 文にも関数にも閉じ括弧がないことを指摘しておきます。次に、== YESは括弧の外にあります。NSString次に、インスタンスをブール値と比較しようとしています。最後に、どちらdefaultskMusic宣言されていません。

したがって、ここにいくつかの修正コードがあります:

-(IBAction)press {
cruzia.hidden = 0;
textarea.hidden = 0;

defaults = [NSUserDefaults standardUserDefaults];
//if defaults has been instantiated earlier and it is a class variable, this won't be necessary.
//Otherwise, this is part of the undeclared identifier problem



/*the other part of the undeclared identifier problem is that kMusic was not declared.
I assume you mean an NSString instance with the text "kMusic", which is how I have modified the below code.
If kMusic is the name of an instance of NSString that contains the text for the key, then that is different.

also, the ==YES was outside of the parentheses.
Moving that in the parentheses should fix the expected expression problem*/
if ([defaults boolForKey:@"kMusic"] == YES) {

    CFBundleRef mainBundle = CFBundleGetMainBundle();
    CFURLRef soundFileURLRef;
    soundFileURLRef =CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"click", CFSTR ("wav"), NULL);
    UInt32 soundID;
    AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
    AudioServicesPlaySystemSound(soundID);
    }
}

古いコードをコピーして貼り付ける前に、私が行った仮定を理解する必要があります。以前に宣言およびインスタンス化されdefaultsていないことを前提としています。最後に、文字列キー「kMusic」で保存されているブール値を探していると仮定しているので、コードの別の場所で次[[NSUserDefaults standardUserDefaults] setBool:true forKey:@"kMusic"]; のようなものを使用します。によると。

最後に、次回は、スタック オーバーフローに持ち込む前に、コードのタイプミスを読み直してください。

于 2013-07-10T01:09:52.250 に答える