2012-03-03 11 views
0

これは問題です。私はXcodeからアプリケーションを起動して起動し、settings.appに切り替えてNOからYESに切り替えます。キー出力は「はい」ではありません。設定バンドルが正しい値を出力しない

私は下の引用に反していると思いますが、ユーザーがアプリを起動して設定を変更してトグルを変更した場合、その回避方法はわかりません。その理由はSettings.app最初の打ち上げ時の出力をNOに出力します。最初にsettings.appに切り替えるときにユーザーが設定を変更できないことは意味しません。新しくインストールされたアプリケーションの場合、設定アプリケーションが実行されるまで、アプリケーションの[設定]バンドルのデフォルトの設定値は設定されません。つまり、設定を実行する前にユーザーがアプリケーションを実行すると、設定バンドルで指定されているデフォルト値は使用できなくなります。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSDictionary *appDefaults = [NSDictionary dictionaryWithObject:@"NO" forKey:@"hideActionBar"]; 
[defaults registerDefaults:appDefaults]; 
[defaults synchronize]; 

、その後、私はそれがしたい場合は、それをあなたが任意の値を設定する必要はありませんBOOL変数の場合

- (void)applicationDidBecomeActive:(UIApplication *)application { 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
BOOL hidden = [defaults boolForKey:@"hideActionBar"]; 
NSLog(@"%d",hidden); 

if (hidden) { 
    viewController.actionButton.enabled = NO; 

} else { 


    viewController.actionButton.enabled = YES; 
}  
} 

と私の設定Root.plist

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"  "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
<key>Type</key> 
<string>PSToggleSwitchSpecifier</string> 
<key>Title</key> 
<string>Hide Action Bar</string> 
<key>Key</key> 
<string>hideActionBar</string> 
<key>DefaultValue</key> 
<false/> 
<key>TrueValue</key> 
<true/> 
<key>FalseValue</key> 
<false/> 
</dict> 
</plist> 

答えて

1

をチェックするために使用するコードNOとなります。初めてアクセスしようとすると、同じことが返されるからです。したがってapplicationDidFinishLaunchingWithOptionsメソッドからregisterDefaultsコード(4行すべて)を削除してください。

説明:あなたはYESNOから設定すると、アプリケーションを起動すると変更

applicationDidFinishLaunchingWithOptionsにこの値は、一度プログラムでNOに変更されます。

注:(プリミティブ型は、0を返しますので、オブジェクト値)あなたが前の値を登録するには、アプリケーションの設定バンドルを使用するたびに値の場合には、(それがまだ未登録の意味)、その値がnilであるかどうかを確認keyはnilであり、最初のデフォルト値で登録するだけで、プログラムで毎回値を変更することになります。

ありがとう、

+0

ありがとう、非常に役に立つ答え。私は、設定から、私のアプリに戻ってきた高速切り替えを使って、私のアプリが新しい値を見るのに十分な速さでnsdefaultsキーに書き込むのではないことを理解しました。回避策への道を見つけ出す必要があります。バックグラウンドの10分の実行物を追加したり、キー値をチェックする前に数秒間タイマーを設定したりします。 – BigB

関連する問題