2012-03-30 25 views
0

我正在開發一個應用程序,它具有evernote集成,一切都很完美,但我的問題是,如果我用我的帳戶登錄並向上註冊或向我的aPP註釋註釋,然後我從Evernote登出並登錄作爲另一個用戶,它仍然下行並注意到上一個帳戶,但登錄成功。 我把NsuserDefault用戶名和密碼textfileds和syncoronize並singlton共享class.my登錄看起來像這樣NSUserDefault無法正常工作

-(IBAction)_clickevernotelogin:(id)sender 
{ 


    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    // Keep this key private 
    NSString *consumerKey = [[[NSString alloc] 
           initWithString: @"myapp" ] autorelease]; 
    [[NSUserDefaults standardUserDefaults] setObject:consumerKey forKey:@"consumerkeyevrnote"]; 
    NSString *consumerSecret = [[[NSString alloc] 
           initWithString: @"agft5623636"] autorelease]; 

    NSURL *userStoreUri = [[[NSURL alloc] 
          initWithString: @"https://www.evernote.com/edam/user"] autorelease]; 
    NSString *noteStoreUriBase = [[[NSString alloc] 
            initWithString: @"https://www.evernote.com/edam/note/"] autorelease]; 

    // These are for test purposes. At some point the user will provide his/her own. 
    NSString *username = [[[NSString alloc] 
          initWithString: _txtevernoteUsername.text] autorelease]; 
    NSString *password = [[[NSString alloc] 
          initWithString: _txtevernotepasswrd.text] autorelease]; 
     [[NSUserDefaults standardUserDefaults] setObject:_txtevernoteUsername.text forKey:@"usernameever"]; 
     [[NSUserDefaults standardUserDefaults] setObject:_txtevernotepasswrd.text forKey:@"passwrdevernote"]; 
     [[NSUserDefaults standardUserDefaults]synchronize]; 

    THTTPClient *userStoreHttpClient = [[[THTTPClient alloc] 
             initWithURL:userStoreUri] autorelease]; 
    TBinaryProtocol *userStoreProtocol = [[[TBinaryProtocol alloc] 
              initWithTransport:userStoreHttpClient] autorelease]; 
    EDAMUserStoreClient *userStore = [[[EDAMUserStoreClient alloc] 
             initWithProtocol:userStoreProtocol] autorelease]; 
    EDAMNotebook* defaultNotebook = NULL; 

    BOOL versionOk = [userStore checkVersion:@"Cocoa EDAMTest" : 
         [EDAMUserStoreConstants EDAM_VERSION_MAJOR] : 
         [EDAMUserStoreConstants EDAM_VERSION_MINOR]]; 

    if (versionOk == YES) 
    { 

     @try { 

      NSError *error = nil; 
      NSString *unameever = _txtevernoteUsername.text; 

      NSString *pwdever = _txtevernotepasswrd.text; 


      [[NSUserDefaults standardUserDefaults] setObject:unameever forKey:@"usernameever"]; 
      BOOL flag = [SFHFKeychainUtils storeUsername:unameever andPassword:pwdever forServiceName:@"mybibleappever" updateExisting:TRUE error:&error]; 
      EDAMAuthenticationResult* authResult = 
      [userStore authenticate:username :password 
            :consumerKey :consumerSecret]; 
      EDAMUser *user = [authResult user]; 
      NSString *authToken = [authResult authenticationToken]; 
      NSLog(@"Authentication was successful for: %@", [user username]); 
      NSLog(@"Authentication token: %@", authToken); 
      [[NSUserDefaults standardUserDefaults] setObject:authToken forKey:@"usernameevernotetocken"]; 
      [[NSUserDefaults standardUserDefaults] setObject:[user username] forKey:@"usernameevernoteshow"]; 
      NSURL *noteStoreUri = [[[NSURL alloc] 
            initWithString:[NSString stringWithFormat:@"%@%@", 
                noteStoreUriBase, [user shardId]] ]autorelease]; 
     } 
     @catch (EDAMUserException * e) { 
      NSString * errorMessage = [NSString stringWithFormat:@"Please enter valid username & password", [e errorCode]]; 
      UIAlertView *alertDone = [[UIAlertView alloc] initWithTitle: @"Evernote" message: errorMessage delegate: self cancelButtonTitle: @"Ok" otherButtonTitles: nil]; 
      _acteverloginimage.hidden = YES; 
      _acteverlogin.hidden =YES; 
      [alertDone show]; 
      [alertDone release]; 
      return; 
     } 


     [pool drain]; 


} 

我註銷看起來像這樣

[_btnusernameshow setTitle:nil forState:UIControlStateNormal]; 
      NSError *error = nil; 
      NSString *usernameever = [[NSUserDefaults standardUserDefaults] objectForKey:@"usernameever"]; 
      BOOL flag = [SFHFKeychainUtils deleteItemForUsername:usernameever andServiceName:@"mybibleappever" error:&error]; 
      [[NSUserDefaults standardUserDefaults ]removeObjectForKey:@"usernameevernote"]; 
      [[NSUserDefaults standardUserDefaults ]removeObjectForKey:@"passwrdevernote"]; 
      [[NSUserDefaults standardUserDefaults ]removeObjectForKey:@"usernameevernotetocken"]; 
      [[NSUserDefaults standardUserDefaults ]removeObjectForKey:@"usernameever"]; 

我的Evernote singlton類通過它在其中的Evernote分享實例看起來像這樣 在這裏我通過nsuerdefault值將認證信息更改爲此類

- (void) connect { 

    if (authToken == nil) 
    {  
     // In the case we are not connected we don't have an authToken 
     // Instantiate the Thrift objects 
     NSURL * NSURLuserStoreUri = [[[NSURL alloc] initWithString: userStoreUri] autorelease]; 

     THTTPClient *userStoreHttpClient = [[[THTTPClient alloc] initWithURL: NSURLuserStoreUri] autorelease]; 
     TBinaryProtocol *userStoreProtocol = [[[TBinaryProtocol alloc] initWithTransport:userStoreHttpClient] autorelease]; 
     EDAMUserStoreClient *userStore = [[[EDAMUserStoreClient alloc] initWithProtocol:userStoreProtocol] autorelease]; 


     // Check that we can talk to the server 
     bool versionOk = [userStore checkVersion: applicationName :[EDAMUserStoreConstants EDAM_VERSION_MAJOR] : [EDAMUserStoreConstants EDAM_VERSION_MINOR]]; 

     if (!versionOk) { 
      // Alerting the user that the note was created 
      UIAlertView *alertDone = [[UIAlertView alloc] initWithTitle: @"Evernote" message: @"Incompatible EDAM client protocol version" delegate: self cancelButtonTitle: @"Ok" otherButtonTitles: nil]; 

      [alertDone show]; 
      [alertDone release]; 

      return; 
     } 


     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
      [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(evrloginnotif:) name:@"evrloginnotiff" object:nil]; 
     //Checks if there is a saved User Name  
     NSError *error = nil; 
     if([defaults objectForKey:@"usernameever"]&&[defaults objectForKey:@"passwrdevernote"]) 
     { 


      username = [defaults objectForKey:@"usernameever"]; 
      password = [defaults objectForKey:@"passwrdevernote"]; 

      //BOOL flag = [SFHFKeychainUtils storeUsername:username andPassword:password forServiceName:@"mybibleappever" updateExisting:TRUE error:&error]; 
      // Returned result from the Evernote servers after authentication 
      EDAMAuthenticationResult* authResult =[userStore authenticate:username :password : consumerKey :consumerSecret]; 

      // User object describing the account 
      self.user = [authResult user]; 
      // We are going to save the authentication token 
      self.authToken = [authResult authenticationToken]; 
      // and the shard id 
      self.shardId = [user shardId]; 

      // Creating the user's noteStore's URL 
      noteStoreUri = [[[NSURL alloc] initWithString:[NSString stringWithFormat:@"%@%@", noteStoreUriBase, shardId] ] autorelease]; 

      // Creating the User-Agent 
      UIDevice *device = [UIDevice currentDevice]; 
      NSString * userAgent = [NSString stringWithFormat:@"%@/%@;%@(%@)/%@", applicationName,applicationVersion, [device systemName], [device model], [device systemVersion]]; 


      // Initializing the NoteStore client 
      THTTPClient *noteStoreHttpClient = [[[THTTPClient alloc] initWithURL:noteStoreUri userAgent: userAgent timeout:15000] autorelease]; 
      TBinaryProtocol *noteStoreProtocol = [[[TBinaryProtocol alloc] initWithTransport:noteStoreHttpClient] autorelease]; 
      noteStore = [[[EDAMNoteStoreClient alloc] initWithProtocol:noteStoreProtocol] retain]; 

     } 
    } 
} 

如何解決這個bug ,,感謝 編輯

但是當我重新構建應用程序,我從用戶名獲得正確的音符

回答

0
NSUserDefaults *Test = [NSUserDefaults standardUserDefaults]; 

[Test removeObjectForKey:@"usernameevernote"]; 
[Test removeObjectForKey:@"passwrdevernote"]; 
[Test removeObjectForKey:@"usernameevernotetocken"]; 
[Test removeObjectForKey:@"usernameever"]; 
[Test synchronize]; 

也許你應該有刪除對象和再次同步它,以便它將刪除所有對象。

+0

我在哪裏註銷了這段代碼? – stackiphone 2012-03-30 05:51:38

+0

是在註銷按鈕clik上。 – 2012-03-30 05:54:56

+0

它不是worrkingggg – stackiphone 2012-03-30 05:57:36

0

添加「[[NSUserDefaults standardUserDefaults] synchronize];」無論你設置值還是從NSUserDefault中刪除密鑰。

可能是同步問題。

+0

haii,但每次我重新啓動應用程序,我會得到正確的音符,你正確的我認爲我有在註銷problm,用戶沒有刪除...讓我chk – stackiphone 2012-03-30 07:13:43

+0

運氣不好,其不工作 – stackiphone 2012-03-30 07:20:31

+0

此代碼之後: [[NSUserDefaults standardUserDefaults] setObject:authToken forKey:@「usernameevernotetocken」]; [[NSUserDefaults standardUserDefaults] setObject:[user username] forKey:@「usernameevernoteshow」]; 是否添加了「[[NSUserDefaults standardUserDefaults] synchronize];」上面的代碼後? – 2012-03-30 08:24:24