1

いくつかの例を見ましたが、テキスト フィールドの入力を保存して、アプリの再起動時に再読み込みしようとすると、何が問題なのかわかりません。私は.mファイルにこのようなものを持っています(.hファイルには.hファイルしかありません<UITextViewDelegate>);

@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*:å" になります。何を保存したかは問題ではありません。

4

2 に答える 2

1

最も簡単な解決策は、設定することです


ViewDidLoad

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

そしてセットアップ中

if (text!=nil) {
        textField.text=text;
    }
于 2013-12-19T13:06:06.757 に答える
0

Setup メソッドはどこで呼び出されますか? viewDidLoad で初期化すると思いますが、setup メソッドは先ほど呼び出しました。この情報を保存しないため、ボタンは初期化の前に認識または情報を読み込んでテキストを設定しません。セットアップメソッドロード情報で

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 オブジェクトを作成するコードを投稿してください。

更新 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];
于 2013-12-19T12:33:15.147 に答える