【发布时间】: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