如何使用NSMutableArray中的数据使用NSUserDefaults保存数据

我的NSMutableArray是在我的.h文件中声明的

 @property (strong, nonatomic) NSMutableArray * numbers; 

如何使用NSMutableArray保存input的数据以保存到NSUserDefaults

所有的帮助表示赞赏

提前致谢

代码在.h文件中

 @property (retain, nonatomic) IBOutlet UITableView *myTableView; @property (strong, nonatomic) NSMutableArray * numbers; 

代码.m

 @synthesize myTableView, numbers; -(void) viewDidLoad { NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults]; [defaults setObject:numbers forKey:@"numberArray"]; NSMutableArray *resultArray = [NSMutableArray arrayWithArray:[defaults objectForKey:@"numberArray"]]; [super viewDidLoad]; // instantiate our NSMutableArray numbers = [[NSMutableArray alloc]initWithObjects:@"",@"", nil]; //Add a edit button self.navigationItem.leftBarButtonItem = self.editButtonItem; //Add the Add button UIBarButtonItem * addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target: self action: @selector(insertNewObject)]; self.navigationItem.rightBarButtonItem = addButton; } -(void) didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } -(void)setEditing:(BOOL)editing animated:(BOOL)animated { [super setEditing:editing animated:animated]; [myTableView setEditing:editing animated:animated]; } -(void) insertNewObject { //Display a UIAlertView UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Enter HomeWork" message: @"" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil]; alert.alertViewStyle = UIAlertViewStylePlainTextInput; [alert show]; } #pragma mark - UITableView Datasource -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return numbers.count; } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *cellIdentifier = @"cell"; UITableViewCell *cell = [ tableView dequeueReusableCellWithIdentifier:cellIdentifier]; if(cell == nil) { cell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: cellIdentifier]; } cell.textLabel.text = [numbers objectAtIndex:indexPath.row]; return cell; } -(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { return YES; } -(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { //remove our NSMutableArray [numbers removeObjectAtIndex:indexPath.row]; //remove from our tableView [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; } } #pragma mark - UITableView Delegate methods #pragma mark - UIAlertViewDelegate Methods -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { //Only perform the following actions if the user hits the ok button if (buttonIndex == 1) { NSString * tmpTextField = [alertView textFieldAtIndex:0].text; if(!numbers) numbers = [[NSMutableArray alloc]init]; [numbers insertObject:tmpTextField atIndex:0]; NSIndexPath * indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; [self.myTableView insertRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationAutomatic]; } } @end 

好的,在我的应用程序中,有一个UITableView

当用户点击“加号”button时,一个UIAlertView会显示一个UITextField,当用户键入一个单词时,文本会进入UITableView,但是当用户退出应用程序时,文本将从表中消失。 我想保存用户放入的文本,所以当用户退出应用程序并返回时,我希望文本保存。 我想用NSUserDefaults保存它。

 //For saving NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults]; [defaults setObject:self.numbers forKey:@"numberArray"]; [defaults synchronize]; //For retrieving NSMutableArray *resultArray = [NSMutableArray arrayWithArray:[defaults objectForKey:@"numberArray"]]; 

根据你的情况,当你退出时运行应用程序…你应该在viewDidLoad检查是否NSUserDefaults中的NSUserDefaults然后检索数组中的结果,并在UITableView显示。 对于保存数据,最好在用户最小化应用程序时收听通知,只需将数据保存到默认值即可。

这是您的案件的工作代码

 - (void)viewDidLoad{ [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //Add a edit button self.navigationController.navigationItem.leftBarButtonItem = self.editButtonItem; // check here if key exists in the defaults or not, if yes the retrieve results in array if([[NSUserDefaults standardUserDefaults] objectForKey:@"numberArray"] != nil) { self.numbers = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"numberArray"]]; } //Register for the notification when user go to background or minimize the app, just save the array objects in the defaults [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appWillGoToBackground:) name:UIApplicationWillResignActiveNotification object:[UIApplication sharedApplication]]; //Add the Add button UIBarButtonItem * addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target: self action: @selector(insertNewObject)]; self.navigationController.navigationItem.rightBarButtonItem = addButton; } -(void)setEditing:(BOOL)editing animated:(BOOL)animated { [super setEditing:editing animated:animated]; [self.myTableView setEditing:editing animated:animated]; } -(void)appWillGoToBackground:(NSNotification *)note { NSLog(@"terminate"); NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults]; [defaults setObject:self.numbers forKey:@"numberArray"]; [defaults synchronize]; } -(void)insertNewObject{ //Display a UIAlertView UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Enter HomeWork" message: @"" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil]; alert.alertViewStyle = UIAlertViewStylePlainTextInput; [alert show]; } -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { //Only perform the following actions if the user hits the ok button if (buttonIndex == 1) { NSString * tmpTextField = [alertView textFieldAtIndex:0].text; if(!self. numbers){ self.numbers = [[NSMutableArray alloc]init]; } [self.numbers insertObject:tmpTextField atIndex:0]; NSIndexPath * indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; [self.myTableView insertRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationAutomatic]; } -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return self.numbers.count; } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *cellIdentifier = @"cell"; UITableViewCell *cell = [ tableView dequeueReusableCellWithIdentifier:cellIdentifier]; if(cell == nil) { cell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: cellIdentifier]; } cell.textLabel.text = [self.numbers objectAtIndex:indexPath.row]; return cell; } -(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { return YES; } -(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { //remove our NSMutableArray [self.numbers removeObjectAtIndex:indexPath.row]; //remove from our tableView [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; } }