【问题标题】:saving user defaults [iOS]保存用户默认值 [iOS]
【发布时间】:2013-12-19 11:36:20
【问题描述】:

我看到了几个示例,但在尝试保存我的文本字段输入并在重新启动应用程序时重新加载它时,我无法弄清楚出了什么问题。 我的 .m 文件中有类似的内容(.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*:å”。不管我保存了什么。

【问题讨论】:

  • 这有什么问题
  • 尝试在 viewDidLoad 中使用 NSString 代替 NSMutableString
  • runMethod 在哪里??
  • 您实际上并没有告诉我们问题出在哪里。您可能会发现阅读How to Ask 很有用
  • @Firegab 尝试过,但仍然加载的视图在我运行它时只会给我这个“¯8*:å”...

标签: ios objective-c nsuserdefaults c4


【解决方案1】:

我发现最简单的解决方案是设置


ViewDidLoad

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

设置

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

【讨论】:

    【解决方案2】:

    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];
    

    【讨论】:

    • 您能再解释一下吗?那条评论对我有什么帮助?
    • viewDidLoad 在设置之前被调用。
    • 那是错误的,你调用viewDidLoad,并且将变量设置为未定义的uitextview,所以文本将不正确。您需要调用 viewdidload 而不从默认加载
    • 那么解决方案是什么?在 viewDidLoad 中设置文本字段?
    • 查看我的答案,我更新了两次。例如在 viewDidLoad 中创建 textfield,或者在 setup 方法中设置 .text 参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    相关资源
    最近更新 更多