上記のコードには多くの問題があります。まず、if 文にも関数にも閉じ括弧がないことを指摘しておきます。次に、== YES
は括弧の外にあります。NSString
次に、インスタンスをブール値と比較しようとしています。最後に、どちらdefaults
もkMusic
宣言されていません。
したがって、ここにいくつかの修正コードがあります:
-(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"];
のようなものを使用します。によると。
最後に、次回は、スタック オーバーフローに持ち込む前に、コードのタイプミスを読み直してください。