在我的.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循环?
答案 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."];