Ios NSMutableArray添加元素在iPhone中被覆盖
每当用户选择一个国家时,我都会尝试将元素添加到Ios NSMutableArray添加元素在iPhone中被覆盖,ios,objective-c,nsmutablearray,Ios,Objective C,Nsmutablearray,每当用户选择一个国家时,我都会尝试将元素添加到NSMutableArray。但是每次我使用[myarray setobject:@'],它正在添加新值,覆盖我的旧值。我希望在以下情况下使用此阵列: [[NSUserDefaults standardUserDefaults]setObject:(NSMutableArray *)selectedCountriesByUser forKey:@"userSelection"]; [[NSUserDefaults standardUserDefaul
NSMutableArray
。但是每次我使用[myarray setobject:@']代码>,它正在添加新值,覆盖我的旧值。我希望在以下情况下使用此阵列:
[[NSUserDefaults standardUserDefaults]setObject:(NSMutableArray *)selectedCountriesByUser forKey:@"userSelection"];
[[NSUserDefaults standardUserDefaults]synchronize];
我想要一个数组,即使在应用程序关闭后,它也会维护用户选择的国家列表
我该怎么办?setObject
替换数组中的所有对象
例如,从NSUserDefault
获取值:
NSMutableArray *myMutableArray = [NSMutableArray arrayWithArray:[[NSUserDefault standardUserDefault] objectForKey:"userSelection"]];
您应该使用[myMutableArray addObject:“accountry”]代码>不覆盖,但仅添加
之后
[[NSUserDefaults standardUserDefaults]setObject:myMutableArray forKey:@"userSelection"];
[[NSUserDefaults standardUserDefaults]synchronize];
编辑:
-(void) viewDidLoad {
//your selectedCountriesByUser
myMutableArray = [NSMutableArray arrayWithArray:[[NSUserDefault standardUserDefault] objectForKey:"userSelection"]];
}
...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//add object to array
[myMutableArray adObject:"yourObj"];
[[NSUserDefaults standardUserDefaults]setObject:myMutableArray forKey:@"userSelection"];
[[NSUserDefaults standardUserDefaults]synchronize];
}
你在问两件不同的事情。首先,-setObject:
不是NS(可变)数组方法。您可能正在寻找-addObject:
方法。因此,要将对象添加到NSMutableArray,需要执行以下操作:
[myMutableArray addObject:yourObject]
//Remember that `-addObject` is present only in NSMutableArray, not in NSArray
您尝试实现的第二件事是将数组存储在NSUserDefaults中。为此,将对象添加到所需数组后,您应该可以执行以下操作:
[[NSUserDefaults standardUserDefaults] setObject:myMutableArray forKey:@"userSelection"];
[[NSUserDefaults standardUserDefaults] synchronize];
尝试使用[myMutableArray addObject:“accountry”];这也覆盖了我的方法;每次我从上一个视图转到当前视图时,此方法都将运行..这是覆盖我的数组的原因吗?如果是,如何使我的数组与用户选择的所有国家/地区一起保存。是否像我的代码一样从nsuserDefault中检索值?每次在viewDidLoad中,您必须像我的代码一样执行操作,因此您需要在数组中填充存储的值。这就是我的应用程序所涉及的内容:国家列表显示在tableview中。因此,我将只在-(void)tableview:(UITableView*)tableview DIDLECTROWATINDEXPATH:(NSIndexPath*)中获取选择的国家indexPath。我希望所选国家/地区稍后存储在数组中,它可以在NSUserDefault中使用。这是我在代码中所做的:在viewdidload中:SelectedCountriesByser=[[NSMutableArray alloc]init];在-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(nsindepath*)indepath{[SelectedCountriesByser addObject:selectedCountry];[NSUserDefaults standardUserDefaults]setObject:(NSMutableArray*)SelectedCountriesByser-forKey:@“userSelection”];[NSUserDefaults standardUserDefaults]Synch];myArray=[[NSUserDefaults standardUserDefaults]objectForKey:@“userSelection”];NSLog(@“viewcontroller%d中的数组计数,[myArray计数]);我在以下行收到异常“[\uu NSCFNumber count]:发送到实例0xb660ef0的无法识别的选择器”:SelectedCountriesByser=[NSMutableArrayWithArray:[[NSUserDefaults standardUserDefaults]objectForKey:@“userSelection”]];
// ARRAY DECLARATION AND ASSIGNMENT OF VALUES TO IT
NSMutableArray * selectedCountriesByUserArray=[[NSMutableArray alloc] init];
[selectedCountriesByUserArray addObject:@"value1"];
[selectedCountriesByUserArray addObject:@"value2"];
[selectedCountriesByUserArray addObject:@"value3"];
// STORING AN ARRAY WITH THE KEY "userSelection" USING NSUSERDEFAULTS
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:selectedCountriesByUserArray forKey:@"userSelection"];
[defaults synchronize];