在 UItableview 中保存和加载数据

save and load data in UItableview

我在 UITableView 中保存和加载数据时遇到一些问题。按下按钮2后,我找不到我保存的数据(可能我没有保存)。

My.h 文件:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UITableViewDelegate,UITableViewDataSource>
{
    NSMutableArray * arrayIdea;
    NSMutableArray * arrayEdit;

    IBOutlet UITableViewCell * cell;

}
@property(nonatomic,strong)IBOutlet UITextField * txtField;
@property(nonatomic,strong)IBOutlet UITableView * tabel1;
-(IBAction)button2:(id)sender;
-(IBAction)button1:(id)sender;
@end

我的 .m 文件:

#import "ViewController.h"

@interface ViewController ()<UITextFieldDelegate>

@end

@implementation ViewController
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
    [textField resignFirstResponder];
    return YES;
}
- (void)viewDidLoad {
    [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.

    arrayIdea = [[NSMutableArray alloc] init];
}


-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (arrayIdea.count > 0) {
        return arrayIdea.count;

    }
    return 0;
}


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    cell = [tableView dequeueReusableCellWithIdentifier:@"cell1"];
        if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell1"];

    }
    cell.textLabel.text =[NSString stringWithFormat:@"%@", arrayIdea[indexPath.row]];

    return cell;
}


-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(nonnull NSIndexPath *)indexPath
{
    if(editingStyle == UITableViewCellEditingStyleDelete) {
        [arrayIdea removeObjectAtIndex:indexPath.row];
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation: UITableViewRowAnimationFade];
    }
}
-(IBAction)button1:(id)sender;{

    [arrayIdea addObject:self.txtField.text];
    [self.tabel1 reloadData];
     self.txtField.text = @"";
    NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:arrayIdea forKey:@"savedstring"];
    [defaults synchronize];
}


-(IBAction)button2:(id)sender;{
    NSUserDefaults*defaults = [NSUserDefaults standardUserDefaults];
    cell.textLabel.text =[defaults objectForKey:@"savedstring"];
}

@end

您需要 encode/decode 您的数组才能在 NSUserDefaults 中保存/检索它。

保存

NSData *dataSave = [NSKeyedArchiver archivedDataWithRootObject: arrayIdea];
[[NSUserDefaults standardUserDefaults] setObject:dataSave forKey:@"savedstring"];
[[NSUserDefaults standardUserDefaults] synchronize];

阅读

NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"savedstring"];
NSArray *savedArray = [NSKeyedUnarchiver unarchiveObjectWithData:data];
In cellForRowAtIndexpath, If you write code like below.

cell.textlabel.text = [[defaults objectForKey:@"saved string"] objectAtIndex:indexPath.row]; 

instead of passing array.
In numberOfRowsInSection you can pass

[[defalts objectForKey:@"saved string"] count];

You already called table reload method, so there is no need of button 2.
Please try.

您可以像这样保存和检索..

保存

[[NSUserDefaults standardUserDefaults]setObject:arrayIdea forKey:@"savedstring"];

并检索

[[NSUserDefaults standardUserDefaults] objectForKey:@"savedstring"];