如何在TableView中使用NSUserDefaults?

时间:2014-07-10 13:39:55

标签: objective-c uitableview uitextfield nsuserdefaults

我想用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。

0 个答案:

没有答案