2012-02-23 4 views
0

제 생각에는 그 문제를 해결하기가 어렵지 않다고 생각합니다. 나는 뭔가를 놓치고 있어야합니다. 내 사용자가 페이스 북으로 로그인하게하여 애플리케이션 설정에서 켜기/끄기 스위치가있는 페이스 북에서 로그 아웃 할 수있는 옵션이 있습니다. 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 스위치를 전환하면, 그는 페이스 북에서 로그 아웃해야한다는 것입니다. 로그 아웃 한 후 스위치는 다시 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]; 

하지만이 코드는 작동하지 않는 것 같습니다. 대부분의 경우 작동합니다 (점검 후에 스위치가 꺼짐). 하지만 때로는 페이스 북에 로그인 한 후 어떤 이유로 스위치를 켜기로 설정할 수 있습니다. 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 시간 동안이 문제를 해결하려고했지만 실제로는 더 이상 진행할 수 없습니다.

답변

2

사용자가 응용 프로그램 설정을 지정한 후 어떤 이유 때문에 [[NSUserDefaults standardUserDefaults] synchronize];을 수행해야하는 것으로 보입니다. 나는 NSUserDefaults에 값을 저장 한 후에 -synchronize에 직접 전화해야한다고 생각했지만 사용자가 응용 프로그램 설정 (Settings.bundle)에서 환경 설정을 설정 한 경우 NSUserDefaults을 검색 한 후 바로 호출해야하는 것 같습니다.

그래서 대신 일 :

// 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];