2012-01-06 4 views
0

В .m файл моего ViewDidLoad У меня есть следующий код:UIAlertView с UITextField - Сохранение с NSUserDefaults

if (![@"1" isEqualToString:[[NSUserDefaults standardUserDefaults] objectForKey:@"Name"]]) { 
    [[NSUserDefaults standardUserDefaults] setValue:@"1" forKey:@"Name"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 


UIAlertView *alertview = [[UIAlertView alloc] initWithTitle:@"What is your name?" message:@"\n\n\n" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Send", nil]; 

UITextField *utextfield = [[UITextField alloc] initWithFrame:CGRectMake (9.0, 60.0, 260.0, 25.0)]; utextfield.placeholder [email protected]"Username"; 
[utextfield setBackgroundColor:[UIColor whiteColor]]; 
[alertview addSubview:utextfield]; 

[alertview show]; 

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 

} 

Как вы можете видеть, пользователь может сохранить его имя здесь, так что он не должен войти это снова и снова. В дополнение к этому он не будет снова задан, если он войдет в него. НО вместо того, чтобы отображать имя при его загрузке, приложение отображает номер 1. Я предполагаю, что здесь отсутствует очевидное.

ответ

1

Вы никогда не устанавливая значение Имя, оно должно быть сделано в alertView:clickedButtonAtIndex:

Я также предлагаю покончить с @ «1», а также проверка на ноль (как предполагает @Roman) или хранения BOOL в другом ключе по умолчанию.

... 
utextfield.tag = 9876; // some value likely not in use by the internals 



- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 
    if (buttonIndex == alertView.cancelButtonIndex) { 
    [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"Name"]; 
    } else if (buttonIndex == alertView.firstOtherButtonIndex) { 
    UITextField *utextfield = (UITextField *)[alertView viewWithTag:9876]; 
    [[NSUserDefaults standardUserDefaults] setValue:utextfield.text forKey:@"Name"]; 
    } 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 

вы можете настроить, что в ваших логических костюмах вы

+0

Спасибо. Я не мог заставить его работать с нолем, поэтому я попробовал ваше решение. Единственная проблема заключается в том, что теперь всплывающее окно предупреждения всегда появляется при загрузке представления. Я попробовал это с другим, если, но havent получил правильный. – Blade

+0

'if ([[NSUserDefaults standardUserDefaults] objectForKey: @" Name "]] == nil)' не работает? – bshirley

+0

Большое спасибо тысячу раз. Я сделал это немного иначе. :) – Blade

1

Проверьте, есть ли прогноз. Вы проверяете, нет ли «1», а не «1». возможно, вы должны проверить, есть ли nil, например. нет имени в настройках пользователя.

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