gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 06:18:47 25 4
gpt4 key购买 nike

我的 NSMutableArray 在我的 .h 文件中声明如下

@property (strong, nonatomic) NSMutableArray * numbers;

如何使用 NSMutableArray 将输入的数据保存到 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

当用户点击“加号”按钮时,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 中的 keyExists,然后在数组中检索结果并显示在 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];
}


}

关于ios - 如何使用 NSUserDefaults 使用 NSMutableArray 中的数据保存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15396365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com