gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:11:58 24 4
gpt4 key购买 nike

我是 ios 开发人员的新手。我想存储 json 和步进器值。我已经存储了 json 且步进器值是 nsmutablearray,但问题是当我返回屏幕时,该数组新值会覆盖旧值。但我想同时存储旧值和新值。我上传我的 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"
},

这是我的屏幕截图

enter image description here

这是我的代码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数组中添加选定的步进值。我在filteredArray中获得完美的值,但旧值被覆盖。我使用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];
}

第二页代码

第二个.h

    #import <UIKit/UIKit.h>

@interface second : UIViewController

@property (weak, nonatomic) IBOutlet UIBarButtonItem *back;
- (IBAction)back:(id)sender;

第二.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 时,您正在推送第一个 View Controller 。你分配了新的。它将创建新的引用而不是旧的引用,因此您的旧值将不会得到。将您的 - (IBAction)back:(id)sender 方法替换为以下代码。

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

或者

- (IBAction)back:(id)sender {
[self.navigationController popViewControllerAnimated:YES];
}
<小时/>

建议:用于存储数组并将其传输到另一个 View Controller ,您不需要使用 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获取第二个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 - 如何在ios中使用按钮单击事件nsmutablearray添加json和stepper值存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35402287/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com