我想用NSUserDefaults
保存数据。我的应用程序包含一个视图控制器,其中我有一个带有UITextFields的TableView
。视图控制器在导航栏的顶部有一个“保存”按钮。用户可以编辑UITextFields,然后单击Save保存数据。
我想就你如何做到这一点提出建议。我开始这样的事情:我在我的.h文件中声明了一个UITextFields(例如,只有一个数据,但我的App有10个UITextfields):
@property (weak, nonatomic) IBOutlet UITextField *email;
然后在我的.m文件中,当用户点击“保存”按钮时,我使用prepareForSegue来保存数据:
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if (sender != self.save) return;
else
{
NSString *userEmail = [self.email text];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:userEmail forKey:@"email"];
[defaults synchronize];
NSLog(@"Data saved");
}
}
我还在ViewDidLoad中检索我的数据:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *userEmail = [defaults objectForKey:@"email"];
self.email.text = userEmail;
在.m文件中,我有一个cellForRowAtIndexPath
来显示UITextfield。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
if ([indexPath section] < 3) {
UITextField *playerTextField = [[UITextField alloc] initWithFrame:CGRectMake(110, 8, 185, 30)];
playerTextField.adjustsFontSizeToFitWidth = YES;
playerTextField.textColor = [UIColor blackColor];
// First section
if ([indexPath section] == 0 && [indexPath row] == 0) {
playerTextField.placeholder = @"Smith";
playerTextField.keyboardType = UIKeyboardTypeDefault;
playerTextField.returnKeyType = UIReturnKeyDone;
[playerTextField setText:[[NSUserDefaults standardUserDefaults] objectForKey:@"email"]];
}
if ([indexPath section] == 0 && [indexPath row] == 1) {
playerTextField.placeholder = @"John";
playerTextField.keyboardType = UIKeyboardTypeDefault;
playerTextField.returnKeyType = UIReturnKeyDone;
}
// Second section
[... SAME STRUCTURE FOR ALL MY SECTION ...]
playerTextField.delegate = self;
[playerTextField setEnabled: YES];
[cell.contentView addSubview:playerTextField];
}
return cell;
}
所以我的问题是如何将第一个UITextfield分配给我的电子邮件NSString?这是一个正确的方法吗?
解决:我找到了一个肮脏的解决方案......我为每一行创建了一个UITextField。