【问题标题】:iOS – Application Settings, trying to reset a switchiOS – 应用程序设置,尝试重置开关
【发布时间】:2012-02-23 23:49:48
【问题描述】:

我认为我的问题并不难解决。我一定错过了什么。我让我的用户使用 Facebook 登录,因此在应用程序设置中,我可以选择使用开/关开关从 Facebook 注销。我在Settings.bundle 中的Root.plist 看起来像这样:

<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),我认为我不需要使用 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];

但由于某种原因,这段代码似乎不起作用。大多数时候它工作(检查后关闭开关)。但有时,即在登录 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 小时,但实际上无法继续进行。

【问题讨论】:

    标签: ios cocoa-touch nsuserdefaults settings.bundle


    【解决方案1】:

    由于某种原因,我似乎必须在用户设置应用程序设置后执行[[NSUserDefaults standardUserDefaults] synchronize];。我只认为您必须在将值保存到 NSUserDefaults 后直接调用 -synchronize 但显然如果用户在应用程序设置中设置了首选项( 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];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-21
      • 1970-01-01
      • 1970-01-01
      • 2015-08-07
      • 2011-06-21
      • 2015-08-03
      相关资源
      最近更新 更多