// ユーザデフォルトに格納される値のキー
#define APP_SETTING_KEY_SOUND_EFFECT @"AppSettingKeySoundEffect"
#define APP_SETTING_KEY_SOUND_EFFECT_VOLUME @"AppSettingKeySoundEffectVolume"
#define APP_SETTING_KEY_SOUND_DECISION @"AppSettingKeySoundDecision"
#define APP_SETTING_KEY_SOUND_CANCEL @"AppSettingKeySoundCancel"
// アプリのセッティングに関するクラス
@interface AppSetting : NSObject
{
BOOL _isPlaySoundEffect; // 効果音を再生するか
float _soundEffectVolume; // 効果音のボリューム
NSString* _decisionSoundFileName;// 決定音ファイル名
NSString* _cancelSoundFileName; // キャンセル音ファイル名
}
@property (nonatomic, readwrite) BOOL isPlaySoundEffect;
@property (nonatomic, readwrite) float SoundEffectVolume;
@property (nonatomic, retain, readwrite) NSString* DecisionSoundFileName;
@property (nonatomic, retain, readwrite) NSString* CancelSoundFileName;
// このクラスのインスタンスを得る
+(AppSetting*)sharedAppSetting;
// このクラスのインスタンスを破棄する
+(void)deleteInstance;
@end
@implementation AppSetting
// 自身のインスタンスを静的変数に保持する
static AppSetting *_AppSettingInstance = nil;
// 自身のインスタンスを削除できるかを指すフラグ
bool _canAppSettingDelete = NO;
// このクラスのインスタンスを得る
+(AppSetting*)sharedAppSetting
{
@synchronized(self) {
if (!_AppSettingInstance) {
_AppSettingInstance = [[self alloc] init];
}
}
return _AppSettingInstance;
}
// このクラスのインスタンスを破棄する
+(void)deleteInstance
{
if (_AppSettingInstance) {
@synchronized(_AppSettingInstance) {
_canAppSettingDelete = YES;
[_AppSettingInstance release];
_AppSettingInstance = nil;
_canAppSettingDelete = NO;
}
}
}
@dynamic isPlaySoundEffect;
-(BOOL) isPlaySoundEffect
{
return _isPlaySoundEffect;
}
-(void) setIsPlaySoundEffect:(BOOL)isPlaySoundEffect
{
if (_isPlaySoundEffect == isPlaySoundEffect) {
return;
}
_isPlaySoundEffect = isPlaySoundEffect;
// ユーザデフォルトに書き込む
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:_isPlaySoundEffect forKey:APP_SETTING_KEY_SOUND_EFFECT];
[defaults synchronize];
}
@dynamic SoundEffectVolume;
-(float) SoundEffectVolume
{
return _soundEffectVolume;
}
-(void) setSoundEffectVolume:(float)SoundEffectVolume
{
if (_soundEffectVolume == SoundEffectVolume) {
return;
}
_soundEffectVolume = SoundEffectVolume;
// ユーザデフォルトに書き込む
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
[defaults setFloat:_soundEffectVolume forKey:APP_SETTING_KEY_SOUND_EFFECT_VOLUME];
[defaults synchronize];
}
@dynamic DecisionSoundFileName;
-(NSString*) DecisionSoundFileName
{
return _decisionSoundFileName;
}
-(void) setDecisionSoundFileName:(NSString *)DecisionSoundFileName
{
if ([_decisionSoundFileName isEqualToString:DecisionSoundFileName]) {
return;
}
[_decisionSoundFileName release];
_decisionSoundFileName = [DecisionSoundFileName retain];
// ユーザデフォルトに書き込む
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:_decisionSoundFileName forKey:APP_SETTING_KEY_SOUND_DECISION];
[defaults synchronize];
}
@dynamic CancelSoundFileName;
-(NSString*) CancelSoundFileName
{
return _cancelSoundFileName;
}
-(void) setCancelSoundFileName:(NSString *)CancelSoundFileName
{
if ([_cancelSoundFileName isEqualToString:CancelSoundFileName]) {
return;
}
[_cancelSoundFileName release];
_cancelSoundFileName = [CancelSoundFileName retain];
// ユーザデフォルトに書き込む
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:_cancelSoundFileName forKey:APP_SETTING_KEY_SOUND_CANCEL];
[defaults synchronize];
}
// ------------------------------------
-(id) init
{
if (self == [super init]) {
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
// デフォルト値を設定ファイルから読み込み、設定する
NSString* userDefaultsValuesPath;
NSDictionary* userDefaultsValuesDict;
userDefaultsValuesPath = [[NSBundle mainBundle] pathForResource:@"UserDefaults" ofType:@"plist"];
userDefaultsValuesDict = [NSDictionary dictionaryWithContentsOfFile:userDefaultsValuesPath];
[defaults registerDefaults:userDefaultsValuesDict];
// 設定情報をユーザデフォルトから読み込む
_isPlaySoundEffect = [defaults boolForKey:APP_SETTING_KEY_SOUND_EFFECT];
_soundEffectVolume = [defaults floatForKey:APP_SETTING_KEY_SOUND_EFFECT_VOLUME];
_decisionSoundFileName = [[defaults objectForKey:APP_SETTING_KEY_SOUND_DECISION] retain];
_cancelSoundFileName = [[defaults objectForKey:APP_SETTING_KEY_SOUND_CANCEL] retain];
}
return self;
}
-(void) dealloc
{
[super dealloc];
}
コメントする