NSUserDefaults сомневается

#pragma mark SA_OAuthTwitterControllerDelegate
- (void) OAuthTwitterController: (SA_OAuthTwitterController *) controller authenticatedWithUsername: (NSString *) username {
    NSLog(@"Authenicated for %@", username);
    [_btnTwitter setTitle:username forState:UIControlStateNormal];
}

У меня есть этот код для отображения имени пользователя для твиттера, и он работает хорошо, но когда я перехожу на другую страницу и возвращаюсь, название пользователя кнопки исчезает, я знаю, что мы должны установить значение NSUserDefault в viewwillapper для проверки существования имени пользователя или нет. Но я не знал, как обращаться с nSUserDefault, если у кого-то есть идея решить эту проблему, пожалуйста, помогите мне. Заранее спасибо. РЕДАКТИРОВАТЬ:

- (void)viewWillAppear:(BOOL)animated{
    //Sets up the NSUserDefaults
    //Sets up the NSUserDefaults
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    //Checks if there is a saved User Name    
    if([defaults objectForKey:@"kTwitterUserName"])
        NSString *username = [defaults objectForKey:@"kTwitterUserName"];
      [_btnTwitter setTitle:username forState:UIControlStateNormal];
    else
    {

    }

вот как будет выглядеть мой взгляд

- (void) OAuthTwitterController: (SA_OAuthTwitterController *) controller authenticatedWithUsername: (NSString *) username {
    NSLog(@"Authenicated for %@", username);
    [_btnTwitter setTitle:username forState:UIControlStateNormal];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:username forKey:@"kTwitterUserName"];
    [defaults synchronize];
    }

вот так выглядит мой твитерметод


person ICoder    schedule 23.11.2011    source источник


Ответы (3)


С NSUserDefaults очень просто работать. Они вроде как словарь, вы устанавливаете объект и ключ. Итак, чтобы сделать то, что вы пытаетесь сделать, вы можете использовать что-то вроде следующего:

//This just sets up the defaults - similar to allocating a dictionary
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

Затем, чтобы установить объект по умолчанию, вы устанавливаете пару объект/ключ следующим образом:

[defaults setObject:username forKey:@"kTwitterUserName"];

Важно вызвать этот метод в какой-то момент: [defaults synchronize];. Это явно сохраняет значения по умолчанию. Таким образом, вы можете сделать это сразу после того, как вы установите ключ имени пользователя.

Затем, чтобы прочитать сохраненное имя пользователя:

 NSString *username = [defaults objectForKey:@"kTwitterUserName"];

Ваш метод oAuth должен выглядеть так:

- (void) OAuthTwitterController: (SA_OAuthTwitterController *) controller authenticatedWithUsername: (NSString *) username {
     //Any thing else you want to do - NSLogs, etc.

     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
     [defaults setObject:username forKey:@"kTwitterUserName"];
     [defaults synchronize];
}

Таким образом, ваш viewWillAppear будет выглядеть примерно так:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    //Sets up the NSUserDefaults
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    //Checks if there is a saved User Name    
     if([defaults objectForKey:@"kTwitterUserName"]) {
         NSString *username = [defaults objectForKey:@"kTwitterUserName"];
    } else
        //Do something else because there is no saved username
        NSLog(@"no username saved");
}

Дайте мне знать в комментарии, если вам нужны какие-либо разъяснения.

person Andrew    schedule 23.11.2011
comment
Это выглядит правильно, но как-то трудно читать в комментарии. Это должно сделать это за вас. Но не забудьте изменить @"theUserName" на username . - person Andrew; 23.11.2011
comment
theusername был просто примером, который я использовал, чтобы показать вам, как это работает, для вашего конкретного случая используйте username в качестве объекта. - person Andrew; 23.11.2011
comment
Здорово. рад помочь. ознакомьтесь с новым разделом, который я только что добавил к своему ответу, это должно сделать его еще более понятным - person Andrew; 23.11.2011
comment
Извини за это. Я сделал небольшую синтаксическую ошибку. Я только что выложил правильную версию - person Andrew; 23.11.2011
comment
И имя пользователя — это новая переменная, которую я объявил в viewWillAppear, поэтому вы можете использовать имя пользователя в своем коде или установить заголовок кнопки или что-то еще. Это совершенно новая переменная. - person Andrew; 23.11.2011
comment
Вместо того, чтобы объявлять его в операторе if, объявите его в файле .h. - person Andrew; 23.11.2011
comment
У меня есть еще один вопрос, я разместил его, если у вас есть время, пожалуйста, изучите его. stackoverflow.com/questions/8240972/ за беспокойство. - person ICoder; 23.11.2011
comment
Я проверил это, и я не очень хорошо разбираюсь в анимации. Я также был немного смущен тем, что вы спрашивали. Так что не думаю, что смогу помочь. Прости - person Andrew; 24.11.2011

Вы правы в том, что вам нужно как-то сохранить это, и NSUserDefaults отлично подойдет для этого. Примеры сохранения и чтения приведены ниже:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

// saving an NSString
[prefs setObject:@"username" forKey:@"UsersUsername"];

// reading an NSString
NSString *theString = [prefs stringForKey:@"UsersUsername"];
person Brayden    schedule 23.11.2011
comment
но какой из приведенного выше кода должен быть помещен в метод viewwillapperar? - person ICoder; 23.11.2011
comment
Вы сохраняете имя пользователя, как показано выше, всякий раз, когда вы получаете его имя пользователя. И затем всякий раз, когда вы хотите получить к нему доступ, чтобы прочитать его снова, то есть - в представленииWillAppear, вы можете прочитать его, как показано выше, и назначить ему любой текст элемента NSString или пользовательского интерфейса. - person Brayden; 23.11.2011

http://www.icodblog.com/2008/10/03/iphone-programming-tutorial-savingretrieving-data-using-nsuserdefaults/ для более подробной информации

person Marios    schedule 23.11.2011