如何在 ios 中使用按钮单击事件 nsmutablearray 添加 json 和步进器值存储
how to add json and stepper value store in using button click event nsmutablearray in ios
我是 ios 的新手 developer.i 想要存储 json 并且步进器 value.i 已经存储了 json 并且步进器值是 nsmutablearray 但问题是当我回到屏幕时,这个数组的新值被覆盖为旧值 value.but 我想存储旧值和新值 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 <UIKit/UIKit.h>
#import <CoreData/CoreData.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@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 数组中添加步进器值。
- (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 在 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 <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];
}
或
- (IBAction)back:(id)sender {
[self.navigationController popViewControllerAnimated:YES];
}
建议:
用于存储和传输数组到另一个 Viewcontroller 你不需要
使用 AppDelegae、NSUserDefault 或 Singletone class。您必须直接将数组从一个 VC 传递到另一个 VC。即下面的代码....
SecondVC.h
#import <UIKit/UIKit.h>
@interface second : UIViewController
@property (strong,nonatomic)NSMutableArray *arrSelectedArray;
@end
FirstVC.m
在这里您可以使用 secondVC'sObj.arrayname
获取第二个 VC 的数组,并将第一个 CV 的值添加到另一个 VC
- (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 的新手 developer.i 想要存储 json 并且步进器 value.i 已经存储了 json 并且步进器值是 nsmutablearray 但问题是当我回到屏幕时,这个数组的新值被覆盖为旧值 value.but 我想存储旧值和新值 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 <UIKit/UIKit.h>
#import <CoreData/CoreData.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@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 数组中添加步进器值。
- (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 在 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 <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];
}
或
- (IBAction)back:(id)sender {
[self.navigationController popViewControllerAnimated:YES];
}
建议: 用于存储和传输数组到另一个 Viewcontroller 你不需要 使用 AppDelegae、NSUserDefault 或 Singletone class。您必须直接将数组从一个 VC 传递到另一个 VC。即下面的代码.... SecondVC.h
#import <UIKit/UIKit.h>
@interface second : UIViewController
@property (strong,nonatomic)NSMutableArray *arrSelectedArray;
@end
FirstVC.m
在这里您可以使用 secondVC'sObj.arrayname
获取第二个 VC 的数组,并将第一个 CV 的值添加到另一个 VC
- (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];
}