【问题标题】:NSUserDefaults doesn't save strings from UITextFields if they are delegated如果委托,NSUserDefaults 不会保存 UITextFields 中的字符串
【发布时间】:2012-11-20 18:18:51
【问题描述】:

源代码:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property IBOutlet UILabel *label;
@property IBOutlet UITextField *textField1;
@property IBOutlet UITextField *textField2;
@property NSInteger textFieldInt1, textFieldInt2;
@property NSString *textFieldStr1, *textFieldStr2;

-(IBAction)Summarize:(id)sender;
-(IBAction)textFieldChanged:(id)sender;

-(void)loadLastActions;

@end


#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

@synthesize label, textField1, textField2, textFieldInt1, textFieldInt2, textFieldStr1, textFieldStr2;

-(IBAction)Summarize:(id)sender {
textFieldInt1=[textField1.text integerValue];
textFieldInt2=[textField2.text integerValue];
label.text=[NSString stringWithFormat: @"%d", textFieldInt1+textFieldInt2];
[self.view endEditing:YES];
}


-(BOOL)textFieldShouldReturn:(UITextField *)textField {
//Do whatever you need to to save etc...
[textField resignFirstResponder];
return NO;
}


-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if(![string intValue] && ![string isEqualToString:@""] && ![string isEqualToString:@"0"])
{
    return NO;
} else {
    return YES;
}
}

-(IBAction)textFieldChanged:(id)sender {
[[NSUserDefaults standardUserDefaults] setObject: textField1.text forKey: @"textField1"];
[[NSUserDefaults standardUserDefaults] setObject: textField2.text forKey: @"textField2"];

}


- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
[self.view endEditing:YES];
[super touchesBegan:touches withEvent:event];
}

- (void)loadLastActions
{
if ([[NSUserDefaults standardUserDefaults] objectForKey: @"textField1"] != nil)
{
    textField1.text = [[NSUserDefaults standardUserDefaults] stringForKey: @"textField1"];
}

if ([[NSUserDefaults standardUserDefaults] objectForKey: @"textField2"] != nil)
{
    textField2.text = [[NSUserDefaults standardUserDefaults] stringForKey: @"textField2"];
}
}

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

[self.textField1 setReturnKeyType:UIReturnKeyDone];
[self.textField2 setReturnKeyType:UIReturnKeyDone];
[self loadLastActions];
}
@end

问题是:操作 ​​textFieldChanged 不会影响 "textField1" NSUserDefaults 键来保存数据。如果我使用 [[NSUserDefaults standardUserDefaults] setObject: textField1.text forKey: @"textField1"];在 Summarize 操作中,它工作正常。我的应用有什么问题?

【问题讨论】:

    标签: uitextfield nsuserdefaults


    【解决方案1】:

    我认为您需要以下内容:

    -(IBAction)textFieldChanged:(id)sender {
      [[NSUserDefaults standardUserDefaults] setObject: textField1.text forKey: @"textField1"];
      [[NSUserDefaults standardUserDefaults] setObject: textField2.text forKey: @"textField2"];
      [[NSUserDefaults standardUserDefaults] synchronize];  // THIS LINE
    }
    

    【讨论】:

    • 你能解释一下为什么“summarize”中的“setting”默认值的变化在没有同步的情况下效果很好吗?
    • 我不明白你的问题。你能用一些代码澄清一下吗?
    • 当然:当我编写方法时 [[NSUserDefaults standardUserDefaults] setObject: textField1.text forKey: @"textField1"]; [[NSUserDefaults standardUserDefaults] setObject: textField2.text forKey: @"textField2"];在 (IBAction)Summarize:(id)sender (我没有使用同步)的实现中,我的应用程序运行良好(应用程序在按下按钮时保存了字符串)。我想改变我的应用程序的原因是让保存功能没有任何按钮。
    • ps。对不起我的英语,我试图解释我最好的
    • 如果没有同步,保存(在启动之间)将不起作用。如果您不调用它,则这些值不会写入磁盘,所以我怀疑您在没有退出应用程序的情况下看到了预期的行为 - 只是四处导航。
    猜你喜欢
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多