gpt4 book ai didi

iOS – 应用程序设置,尝试重置开关

转载 作者:行者123 更新时间:2023-11-28 23:05:11 25 4
gpt4 key购买 nike

我觉得我的问题没有那么难解决。我一定是错过了什么。我让我的用户使用 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 成为开关的默认值。

因为 bool 值默认为 NO (OFF) 我想我不需要使用 NSUserDefaultregisterDefaults:

所以我检查 applicationWillEnterForeground: 是否用户通过检查以下内容在 App Settings 中打开了开关:

// 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 个小时,但无法真正继续进行下去。

最佳答案

出于某种原因,我似乎必须在用户设置应用程序设置后执行 [[NSUserDefaults standardUserDefaults] synchronize];。我只认为你必须在将值保存到 NSUserDefaults 后直接调用 -synchronize 但显然你必须在检索 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];

关于iOS – 应用程序设置,尝试重置开关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9423331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com