简体   繁体   English

NSMutableArray添加元素在iPhone中被覆盖

[英]NSMutableArray adding elements get overwritten in iPhone

I'm trying to add elements to an NSMutableArray whenever a user selects a country. 我试图在用户选择国家时向NSMutableArray添加元素。 But each time I use [myarray setobject:@""]; 但每次我使用[myarray setobject:@""]; , it's adding the new value, overwriting my old value. ,它正在添加新值,覆盖我的旧值。 I want this array as I'm using it in: 我想要这个数组,因为我正在使用它:

[[NSUserDefaults standardUserDefaults]setObject:(NSMutableArray *)selectedCountriesByUser forKey:@"userSelection"];
[[NSUserDefaults standardUserDefaults]synchronize];

I want an array which maintains the list of countries selected by the user even after the application is closed. 我想要一个数组,即使在应用程序关闭后也会维护用户选择的国家/地区列表。

What should I do? 我该怎么办?

setObject replace all objects in array setObject替换数组中的所有对象

for example, get value from NSUserDefault : 例如,从NSUserDefault获取值:

NSMutableArray *myMutableArray = [NSMutableArray arrayWithArray:[[NSUserDefault standardUserDefault] objectForKey:"userSelection"]];

you should use [myMutableArray addObject:"aCountry"]; 你应该使用[myMutableArray addObject:"aCountry"]; without overwriting, but adding only 没有覆盖,但只添加

and after 之后

[[NSUserDefaults standardUserDefaults]setObject:myMutableArray forKey:@"userSelection"];
[[NSUserDefaults standardUserDefaults]synchronize];

EDIT: 编辑:

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

 }

You're asking two different things. 你问的是两件不同的事情。 First, -setObject: is not a NS(Mutable)Array method. 首先, -setObject:不是NS(Mutable)Array方法。 You are probably looking for the -addObject: method. 您可能正在寻找-addObject:方法。 So, to add an object to your NSMutableArray, you need to do: 因此,要将对象添加到NSMutableArray,您需要执行以下操作:

[myMutableArray addObject:yourObject] 
//Remember that `-addObject` is present only in NSMutableArray, not in NSArray

The second thing you are trying to achieve is to store the array in NSUserDefaults. 您要尝试实现的第二件事是将数组存储在NSUserDefaults中。 to do so, after you add the object to the array you want, you should be fine do to so: 为此,在将对象添加到所需的数组后,您应该这样做:

[[NSUserDefaults standardUserDefaults] setObject:myMutableArray forKey:@"userSelection"];
[[NSUserDefaults standardUserDefaults] synchronize];
// 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];

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM