2013-12-19 4 views
1

Я видел несколько примеров, но не могу понять, что происходит, когда пытаешься сохранить ввод текстового поля и перезагрузить его при перезапуске приложения. У меня есть что-то подобное в моем файле .m (файл .h имеет только <UITextViewDelegate>);сохранение пользовательских настроек по умолчанию [iOS]

@implementation C4WorkSpace{ 
    UITextView *textField; 
    C4Button *okButton; 
    C4Label *savedText; 
} 

-(void)setup { 
    //add text field 
    CGRect textViewFrame = CGRectMake(20.0f, 20, self.canvas.width-40, 124.0f); 
    textField = [[UITextView alloc] initWithFrame:textViewFrame]; 
    textField.returnKeyType = UIReturnKeyDone; 
    [textField becomeFirstResponder]; 
    textField.delegate = self; 
    //textField.hidden=true; 

    [self.view addSubview:textField]; 

    okButton=[C4Button buttonWithType:ROUNDEDRECT]; 
    [okButton setTitle:@"Save" forState:NORMAL]; 
    okButton.center=self.canvas.center; 
    [self.canvas addUIElement:okButton]; 
    [okButton runMethod:@"saveDefault" target:self forEvent:TOUCHUPINSIDE]; 

    savedText=[C4Label labelWithText:@"default"]; 
    savedText.center=CGPointMake(self.canvas.center.x, self.canvas.center.y+40); 
    [self.canvas addLabel:savedText]; 
} 
-(void)saveDefault{ 
    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults]; 

    [defaults setObject:textField.text forKey:@"userName"]; 
    [defaults synchronize]; 
    C4Log(@"defaults: %@",defaults); 
    C4Log(@"defaults: %@", [defaults objectForKey:@"userName"]); 
    savedText.text=textField.text; 
} 
-(void)viewDidLoad{ 
    NSMutableString *text=[[NSUserDefaults standardUserDefaults] objectForKey:@"userName"]; 
    C4Log(@"loadedText:%s", text); 
    textField.text=text; 
    savedText.text=text; 
} 
@end 

Я не уверен, что именно происходит не так, но когда я перезапустить приложение loadedText всегда: «8 *: å». Неважно, что я спас.

+2

, что проблема в этом – Sport

+0

Попробуйте использовать NSString вместо NSMutableString в viewDidLoad – Firegab

+0

Где runMethod ?? –

ответ

1

Я нашел простое решение, чтобы установить в


ViewDidLoad

text=[[NSUserDefaults standardUserDefaults] objectForKey:@"userName"]; 

и установки

if (text!=nil) { 
     textField.text=text; 
    } 
0

Где находится метод установки? Я думаю, что в viewDidLoad вы инициализируетесь, но метод установки называется ранее. Вы не сохраняете эту информацию, поэтому кнопка не распознает или не загружает информацию и не устанавливает текст перед инициализацией. в настройки информации метод загрузки

UItextView *k = [UItextView alloc] init]; 
k.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"userName"]; 

и посмотреть, что будет.

ОБНОВЛЕНИЕ:

Это не так;

[c4workspace loadInfoFromDefaults]; 
[c4workspace alloc]init]; (calls viedidload method with load info) 

Вам нужно

[c4workspace alloc]init]; 
[c4workspace loadInfoFromDefaults]; 

Пожалуйста, пост код, где вы создаете объект c4WorkSpace.

UPDATE 2:

-(void)setup { 

    //add text field 
    CGRect textViewFrame = CGRectMake(20.0f, 20, self.canvas.width-40, 124.0f); 
    textField = [[UITextView alloc] initWithFrame:textViewFrame]; 
    textField.returnKeyType = UIReturnKeyDone; 
    [textField becomeFirstResponder]; 
    textField.delegate = self; 
    //textField.hidden=true; 

    [self.view addSubview:textField]; 

    okButton=[C4Button buttonWithType:ROUNDEDRECT]; 
    [okButton setTitle:@"Save" forState:NORMAL]; 
    okButton.center=self.canvas.center; 
    [self.canvas addUIElement:okButton]; 
    [okButton runMethod:@"saveDefault" target:self forEvent:TOUCHUPINSIDE]; 

    savedText=[C4Label labelWithText:@"default"]; 
    savedText.center=CGPointMake(self.canvas.center.x, self.canvas.center.y+40); 
    [self.canvas addLabel:savedText]; 
} 

- (void) setTextView 
{ 
    textField.text=[[NSUserDefaults standardUserDefaults] objectForKey:@"userName"]; 
    savedText.text=[[NSUserDefaults standardUserDefaults] objectForKey:@"userName"]; 
} 

Так вы называете это так:

C4WorkSpace *c4 = [C4WorkSpace alloc] init]; 
[c4 setup] 
[c4 setTextView]; 
+0

не могли бы вы объяснить это немного больше? Как мне это поможет? – suMi

+0

viewDidLoad вызывается перед настройкой. – suMi

+0

, и это неправильно, вы вызываете viewDidLoad, и там задано значение переменной undefined uitextview, поэтому текст будет неправильным. Вам нужно позвонить viewdidload без загрузки по умолчанию – gronzzz

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