如何在ios中使用按钮单击事件nsmutablearray添加json和stepper值存储 [英] how to add json and stepper value store in using button click event nsmutablearray in ios
问题描述
我是ios developer.i中的新手。想要存储json和stepper value.i已经存储了json和stepper值是nsmutablearray但问题是当我回到屏幕时,这个数组的新值被覆盖到旧值。但我想存储旧的nad新值both.i上传我的json响应。
i am new in ios developer.i want to store json and stepper value.i have already store json and stepper value is nsmutablearray but problem is when i back to the screen that time this array new value is overwrite to old value.but i want to store old nad new value both.i upload my json response.
{
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"
},
这是我的屏幕截图
这是我的代码
Ap pDelegate.h
here is my code AppDelegate.h
#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic)NSMutableArray *filteredArray;
AppDelegate.m
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中添加json数据nsmutablearray
here this method is add json data in arraycount nsmutablearray
-(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]);
}
});
}];
}
此处此代码我将显示json数据在tableview中并在Arraycounts数组中添加stepper值。
here this code i will display json data in tableview and add stepper value in Arraycounts array.
- (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但不解决问题。
here this code is i will add selected stepper value in filteredArray array.i get perfect value in filteredArray but old value is overwrite.i use NSUserDefaults but not solve problem.
- (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 <UIKit/UIKit.h>
@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];
}
请帮助我。
推荐答案
您需要在 Second.m中仅更新 - (IBAction)back:(id)sender
目前,您正在从Viewcontroller.m展示SecondViewController。
当你从Second.m回到First时,你正在推动第一个viewcontroller。你分配新的。它会创建旧的旧参考,所以你的旧价值不会得到。
用以下代码替换 - (IBAction)back:(id)sender
方法。
- (IBAction)back:(id)sender {
[self dismissViewControllerAnimated:NO completion:nil];
}
OR
- (IBAction)back:(id)sender {
[self.navigationController popViewControllerAnimated:YES];
}
建议:
用于存储和传输数组到另一个Viewcontroller你不需要
使用AppDelegae,NSUserDefault或Singletone类。你需要将数组从一个VC传递到另一个VC。即低于代码....
SecondVC.h
#import <UIKit/UIKit.h>
@interface second : UIViewController
@property (strong,nonatomic)NSMutableArray *arrSelectedArray;
@end
FirstVC.m
在这里你可以使用 secondVC'sObj.arrayname
获得secondVC的数组,并将第一个CV的addvalue添加到另一个VC
FirstVC.m
here you can get secondVC's array using secondVC'sObj.arrayname
and addvalue from first CV to anotherVC
- (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];
}
这篇关于如何在ios中使用按钮单击事件nsmutablearray添加json和stepper值存储的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!