2012-02-23 2 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. После выхода из системы коммутатор должен переключиться на ВЫКЛ. Поэтому я хочу, чтобы ВЫКЛ был значением по умолчанию для коммутатора.

Поскольку булевы по умолчанию NO (OFF) Я думаю, мне не нужно использовать NSUserDefaultregisterDefaults:

Так я проверяю в applicationWillEnterForeground: если пользователь включил переключатель в настройках App, проверяя это:

// 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]; 

Но по некоторым причинам этот код не работает. Большую часть времени он работает (swith выключается после проверки). Но иногда после входа в 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]; после того, как пользователь установил настройку приложения. Я только думал, что вам нужно позвонить -synchronize непосредственно после того, как вы сохраните свои значения до NSUserDefaults, но, похоже, кажется, что вы должны вызвать его непосредственно после получения NSUserDefaults ЕСЛИ пользователь установил предпочтение в настройках приложения (Settings.bundle).

Так вместо того, чтобы делать:

// 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]; 
Смежные вопросы