2012-02-23 13 views
0

私の問題は解決するのが難しくないと思います。私は何かを逃しなければならない。私はユーザーがFacebookにログインできるようにアプリケーション設定でオン/オフスイッチを使ってFacebookからログアウトするオプションがあります。 Settings.bundleでの私のRoot.plistは次のようになります。iOS - アプリケーション設定、スイッチをリセットしようとしています

<dict> 
    <key>PreferenceSpecifiers</key> 
    <array> 
     <dict> 
      <key>Title</key> 
      <string></string> 
      <key>Type</key> 
      <string>PSGroupSpecifier</string> 
     </dict> 
     <dict> 
      <key>DefaultValue</key> 
      <false/> 
      <key>Key</key> 
      <string>facebookLogoutTriggered</string> 
      <key>Title</key> 
      <string>Logout Facebook</string> 
      <key>Type</key> 
      <string>PSToggleSwitchSpecifier</string> 
     </dict> 
    </array> 
    <key>StringsTable</key> 
    <string>Root</string> 
</dict> 

だから、基本的に、私は後だ機能は、ユーザがONにスイッチを切り替えた場合、彼はFacebookのからログアウトする必要があるということです。彼がログアウトした後、スイッチはOFFに戻ります。ですから、スイッチのデフォルト値をOFFにします。 NOのブール値のデフォルト以来

(OFF)私は、ユーザーがチェックすることにより、アプリケーションの設定で上にスイッチを投入しているのであれば、私はapplicationWillEnterForeground:にチェックNSUserDefaultregisterDefaults:

を使用する必要はありません考えていますこれは:

// Check if the user wants to logout from Facebook 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
BOOL facebookLogoutTriggered = [defaults boolForKey:@"facebookLogoutTriggered"]; 

// Set "Logout Facebook" setting to OFF (NO)  
[defaults setBool:NO forKey:@"facebookLogoutTriggered"]; 
[defaults synchronize]; 

しかし、このコードは動作していないようです。たいていの場合、それは機能します(スウィートはチェックの後にオフになります)。しかし、時にはFacebookへのログイン後、何らかの理由でスイッチをオンにすることがあります。 Facebookにログインした後に実行するコードは次のとおりです。

#pragma mark - FBSessionDelegate Methods 

- (void)fbDidLogin { 

    DLog(@"User logged in to Facebook."); 

    AppDelegate *appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate]; 

    // Save accesstoken and expirationdate 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:[appDelegate.facebook accessToken] forKey:@"FBAccessTokenKey"]; 
    [defaults setObject:[appDelegate.facebook expirationDate] forKey:@"FBExpirationDateKey"]; 

    [defaults synchronize]; 

    DLog(@"defaults %@", [defaults objectForKey:@"facebookLogoutTriggered"]); 

} 

これを6時間修正しようとしていますが、それ以上は進めません。

答えて

2

ユーザーがアプリケーション設定を行った後で何らかの理由で[[NSUserDefaults standardUserDefaults] synchronize];を実行しなければならないようです。値をNSUserDefaultsに保存した直後に-synchronizeに電話しなければならないと思っていましたが、ユーザーがアプリケーション設定(Settings.bundle)で設定した場合は、NSUserDefaultsを取得した後で直接呼び出す必要があるようです。

ので、代わりのやって:

// Check if the user wants to logout from Facebook 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
BOOL facebookLogoutTriggered = [defaults boolForKey:@"facebookLogoutTriggered"]; 

// Set "Logout Facebook" setting to OFF (NO)  
[defaults setBool:NO forKey:@"facebookLogoutTriggered"]; 
[defaults synchronize]; 

を私は今:

// Check if the user wants to logout from Facebook 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
// Make SURE we get the updated data from the Application Settings 
[defaults synchronize]; 
BOOL facebookLogoutTriggered = [defaults boolForKey:@"facebookLogoutTriggered"]; 

// Set "Logout Facebook" setting to OFF (NO)  
[defaults setBool:NO forKey:@"facebookLogoutTriggered"]; 
[defaults synchronize]; 
関連する問題