我认为我的问题并不难解决。我必须错过某些东西。我让我的用户使用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)我想我并不需要使用NSUserDefault
的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小时,但真的不能进一步检讨。