使用TextField标记和保存数据

时间:2014-07-30 00:16:28

标签: ios objective-c

在我的.xib文件中,我有一个按钮,按下时会生成3个UITextField。这些文本字段都有一个标记,因此它们是独立声明的。我的问题是我想使用NSUserDefaults保存这些文本字段,我不知道该怎么做。我已经能够使用无循环写出所有内容,但如果我能用循环和标签来做,我会非常高兴。我只是不确定我是否可以使用标签或者根本不知道如何使用标签。

我已经能够使用if语句创建文本字段(以限制可以创建的数量)按下按钮但超出我不确定的范围。这是我到目前为止所拥有的......

int y = 115;  // For height of buttons in addClass
int i = 1;   // Counter

- (IBAction)addClass:(id)sender
{
    if (i < 8) {


    UITextField *class = [[UITextField alloc] initWithFrame:CGRectMake(20, y, 118, 30)];
        class.tag = i;
class.placeholder = @"Class";
class.borderStyle = UITextBorderStyleRoundedRect;
class.font = [UIFont fontWithName:@"System" size:14.0];
class.textAlignment = NSTextAlignmentCenter;

[self.view addSubview:class];

UITextField *grade = [[UITextField alloc] initWithFrame:CGRectMake(169, y, 59, 30)];
    grade.tag = i;
grade.placeholder = @"Grade";
grade.borderStyle = UITextBorderStyleRoundedRect;
grade.font = [UIFont fontWithName:@"System" size:14.0];
grade.textAlignment = NSTextAlignmentCenter;

[self.view addSubview:grade];

UITextField *credit = [[UITextField alloc] initWithFrame:CGRectMake(236, y, 64, 30)];
    credit.tag = i;
credit.placeholder = @"Credits";
credit.borderStyle = UITextBorderStyleRoundedRect;
credit.font = [UIFont fontWithName:@"System" size:14.0];
credit.textAlignment = NSTextAlignmentCenter;

[self.view addSubview:credit];

y = y + 45;
i++;
}}



- (IBAction)save:(id)sender
{

//Grade1 save string
NSString *saveString0 = grade1.text;
NSUserDefaults *defaults0 = [NSUserDefaults standardUserDefaults];
[defaults0 setObject:saveString0 forKey:@"saveString0"];
[defaults0 synchronize];

//Grade2 save string
NSString *saveString1 = grade2.text;
NSUserDefaults *defaults1 = [NSUserDefaults standardUserDefaults];
[defaults1 setObject:saveString1 forKey:@"saveString1"];
[defaults1 synchronize];

//Grade3 save string
NSString *saveString2 = grade3.text;
NSUserDefaults *defaults2 = [NSUserDefaults standardUserDefaults];
[defaults2 setObject:saveString2 forKey:@"saveString2"];
[defaults2 synchronize];
...
}

如您所见,等级的保存字符串都是单独编码的。我想学习怎么做是创建一个for循环,表达式将达到i(计数器)的值,所以像...

for(int j = 0; j <= i; j++)

然后j是进入* saveString,* defaults和grade.text的值。 如果有人知道如何做到这一点或有更好的解决方案,我将非常感激。

感谢pedros。最后一件事,如果我有......

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *loadString = [defaults objectForKey:@"saveString"];
[grade1 setText:loadString];
[loaded setText:@"Data Loaded Successfully."];

我如何更改它以实现for循环?

1 个答案:

答案 0 :(得分:1)

尝试这样的事情。

NSArray *grades = @[grade1, grade2, grade3, ...];

for(int j = 0; j <= i; j++) {
    NSString *saveString = [(UITextField*)grades[j] text];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *key = [NSString stringWithFormat:@"saveString%d", j];
    [defaults setObject:saveString forKey:key];
}
[defaults synchronize];

第二部分非常相似。

NSArray *grades = @[grade1, grade2, grade3, ...];

for(int j = 0; j <= i; j++) {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *loadString = [defaults objectForKey:@"saveString%d", j];
    [(UITextField*)grades[j] setText:loadString];
}
[loaded setText:@"Data Loaded Successfully."];