如何在ios中使用按钮单击事件nsmutablearray添加json和stepper值存储

我是ios developer.i中的新手想要存储json和stepper value.i已经存储json和stepper值是nsmutablearray但问题是当我回到屏幕时,这个数组的新值被覆盖到旧值。但我想要存储旧的nad新值both.i上传我的json响应。

{ Data: [ { m_id: "1", m_name: "Shirts(Man)", m_drycleaning_price: "12", m_washiron_price: "25", m_wash_price: "10", m_iron_price: "9", m_imagename: "a" }, { m_id: "2", m_name: "Pants(Man)", m_drycleaning_price: "15", m_washiron_price: "12", m_wash_price: "13", m_iron_price: "10", m_imagename: "s" }, 

这是我的屏幕截图

在此处输入图像描述

这是我的代码AppDelegate.h

 #import  #import  @interface AppDelegate : UIResponder  @property (strong, nonatomic)NSMutableArray *filteredArray; 

AppDelegate.m

 #import "AppDelegate.h" @interface AppDelegate () @end @implementation AppDelegate @synthesize filteredArray,abc; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { filteredArray = [[NSMutableArray alloc]initWithArray:[[NSUserDefaults standardUserDefaults]objectForKey:@"def_orderarraylist"]]; NSLog(@"testdd=%@",filteredArray); // Override point for customization after application launch. return YES; } 

这里的方法是在arraycount nsmutablearray中添加json数据

  -(void)fetchdata { NSString *login= [[NSString stringWithFormat:@"http://o.php"]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSLog(@"----%@", login); NSURL *url = [NSURL URLWithString:[login stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; //-- Get request and response though URL NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url]; [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { dispatch_async(dispatch_get_main_queue(), ^{ if (data) { dic_property= [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; NSMutableArray *tempArray = dic_property[@"Data"]; for (int i=0; i<tempArray.count; i++) { NSMutableDictionary *dictValues = [NSMutableDictionary dictionaryWithDictionary:tempArray[i]]; [dictValues setValue:@"0" forKey:@"counts"]; [self.arrayCounts addObject:dictValues]; } [self.tableview reloadData]; NSLog(@"array data=%@",self.arrayCounts); } else { NSLog(@"network error, %@", [error localizedFailureReason]); } }); }]; } 

这段代码我将在tableview中显示json数据,并在Arraycounts数组中添加stepper值。

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *simpleTableIdentifier = @"SimpleTableItem"; custom *cell = (custom *)[self.tableview dequeueReusableCellWithIdentifier:simpleTableIdentifier]; if (cell == nil) cell = [[[NSBundle mainBundle] loadNibNamed:@"customcell" owner:self options:nil] objectAtIndex:0]; // cell.lblcount.text = self.arrayCounts[indexPath.row][@"counts"]; cell.lbltitle.text=self.arrayCounts[indexPath.row][@"m_name"];; [cell.stepper addTarget:self action:@selector(itemsChange:) forControlEvents:UIControlEventValueChanged]; return cell; } - (void)itemsChange:(UIStepper*)stepper { CGPoint cursorPosition = [stepper convertPoint:CGPointZero toView:self.tableview]; NSIndexPath *indexPath = [self.tableview indexPathForRowAtPoint:cursorPosition]; custom *currentCell = (custom *)[self.tableview cellForRowAtIndexPath:indexPath]; double value = [stepper value]; [currentCell.lblcount setText:[NSString stringWithFormat:@"%d", (int)value]]; self.arrayCounts[indexPath.row][@"counts"] = [NSString stringWithFormat:@"%d",(int)value]; } 

这里的代码是我将在filteredArray array.i中添加选定的stepper值。在filteredArray中得到完美的值但旧值是overwrite.i使用NSUserDefaults但不解决问题。

  - (IBAction)placeorder:(id)sender { NSPredicate *predicate = [NSPredicate predicateWithFormat:@"counts != %@",@"0"]; AppDelegate *myAppDelegate = [[UIApplication sharedApplication] delegate]; myAppDelegate.filteredArray =(NSMutableArray *) [self.arrayCounts filteredArrayUsingPredicate:predicate]; NSLog(@"value:%@",myAppDelegate.filteredArray); NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; [userDefaults setObject:myAppDelegate.filteredArray forKey:@"def_orderarraylist"]; second *next=[self.storyboard instantiateViewControllerWithIdentifier:@"secondpage"]; [self presentViewController:next animated:YES completion:nil]; } 

第二页代码

second.h

  #import  @interface second : UIViewController @property (weak, nonatomic) IBOutlet UIBarButtonItem *back; - (IBAction)back:(id)sender; 

second.m

 - (void)viewDidLoad { [super viewDidLoad]; NSMutableArray *test = [[NSMutableArray alloc]initWithArray:[[NSUserDefaults standardUserDefaults]objectForKey:@"def_orderarraylist"]]; NSLog(@"testdd=%@",test); NSLog(@"old value=%@",[SharedUser getInstance].arrayCounts); // Do any additional setup after loading the view. } - (IBAction)back:(id)sender { ViewController *next=[self.storyboard instantiateViewControllerWithIdentifier:@"firstpage"]; [self presentViewController:next animated:YES completion:nil]; } 

请帮助我。

你需要更新- (IBAction)back:(id)senderSecond.m目前你正在从Viewcontroller.m呈现SecondViewController。 当你从Second.m回到First时,你正在推动第一个viewcontroller。 你分配新的。 它会创建旧的旧参考,所以你的旧价值不会得到。 用以下代码替换你的- (IBAction)back:(id)sender方法。

 - (IBAction)back:(id)sender { [self dismissViewControllerAnimated:NO completion:nil]; } 

要么

 - (IBAction)back:(id)sender { [self.navigationController popViewControllerAnimated:YES]; } 

建议: 对于存储和传输数组到另一个Viewcontroller,您不需要使用AppDelegae,NSUserDefault或Singletone类。 你需要将数组从一个VC传递到另一个VC。 即代码…… SecondVC.h

 #import  @interface second : UIViewController @property (strong,nonatomic)NSMutableArray *arrSelectedArray; @end 

FirstVC.m 在这里,您可以使用secondVC'sObj.arrayname获取secondVC的数组,并将第一个CV的secondVC'sObj.arrayname转换为另一个CV

 - (IBAction)placeorder:(id)sender { NSPredicate *predicate = [NSPredicate predicateWithFormat:@"counts != %@",@"0"]; NSArray *tmpArray = [self.arrMain filteredArrayUsingPredicate:predicate]; second *next=[self.storyboard instantiateViewControllerWithIdentifier:@"secondpage"]; next.arrSelectedArray = [NSMutableArray arrayWithArray:tmpArray]; [self presentViewController:next animated:YES completion:nil]; }