iOS - Настройки приложения, пытаюсь сбросить переключатель - PullRequest
0 голосов
/ 24 февраля 2012

Я думаю, что мою проблему не так сложно решить.Я должен что-то упустить.Я позволил своим пользователям войти в систему через Facebook, поэтому в настройках приложения у меня есть возможность выйти из Facebook с помощью переключателя вкл / выкл.Мой Root.plist в Settings.bundle выглядит следующим образом:

<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 было значением по умолчанию для переключателя.

Поскольку логическое значение по умолчанию равно NO (OFF), я думаю, мне не нужно использовать NSUserDefault ´s registerDefaults:

Поэтому я проверяю applicationWillEnterForeground:, включил ли пользователь переключатель в настройках приложения, установив следующее:

// 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 часов, но сейчас не могу продолжить.

1 Ответ

2 голосов
/ 24 февраля 2012

Почему-то кажется, что я должен сделать [[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];
...