2012-03-30 2 views
0

Я разрабатываю приложение, которое имеет интеграцию с Evernote, все работает отлично, но моя проблема заключается в том, что если я вхожу в систему с моей учетной записью и записью uplode или downlode на мою aPP, то я выхожу из evernote и login как другой пользователь, он по-прежнему записывает нижнюю и верхнюю ноты в предыдущую учетную запись, но логин - успешный. я поставил NsuserDefault имя пользователя и пароль textfileds и syncoronize его и передать его в Evernote Синглтон общий 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 Синглтон, который доля экземпляра выглядит так: здесь я передаю значение 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]; 

     } 
    } 
} 

как решить эту ошибку ,, спасибо EDIT

но когда я восстановить приложение, я получаю правильные ноты от имени пользователя

ответ

0
NSUserDefaults *Test = [NSUserDefaults standardUserDefaults]; 

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

может быть, вы должны иметь удалить объекты и синхронизируйте его снова, чтобы удалить все объекты.

+0

Где я разместил этот код? При выходе из системы? – stackiphone

+0

Да при выходе из системы clik. –

+0

его не worrkingggg – stackiphone

0

Добавить "[[NSUserDefaults standardUserDefaults] synchronize];" линии везде, где вы устанавливаете значение или удаляете ключ из NSUserDefault.

Может быть, проблема синхронизации.

+0

haii, но каждый раз, когда я перезапускаю приложение, я получаю правильное примечание, вы правильно исправите, я думаю, что у меня есть проблема в logout, пользователь не удалил ... позвольте мне chk – stackiphone

+0

неудача, его не работаетgggg – stackiphone

+0

После этого кода: [[NSUserDefaults standardUserDefaults] setObject: authToken forKey: @ "usernameevernotetocken"]; [[NSUserDefaults standardUserDefaults] setObject: [имя пользователя пользователя] дляKey: @ "usernameevernoteshow"]; У вас добавлено «[[NSUserDefaults standardUserDefaults] synchronize];" после выше кода ???? –

Смежные вопросы