Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSMutableArray添加元素在iPhone中被覆盖_Ios_Objective C_Nsmutablearray - Fatal编程技术网

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];