3

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"
},

here is my screen shot

enter image description here

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

#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;
}

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]);
                                       }
                                   });

                               }];


    }

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


}

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 page code

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

pls.. help me.

Jigar
  • 1,801
  • 1
  • 14
  • 29
  • use nsuserdefault and store your array – Rince Thomas Feb 15 '16 at 05:50
  • i already use nsuserdefault.see placeorder action event – Jigar Feb 15 '16 at 05:52
  • I don't think `NSUserDefaults` should be used for that. You should use singleton pattern instead. – NSNoob Feb 15 '16 at 05:54
  • Keep your mutable array in the shared (singleton) class and you will be able to access/retain it on all screens. (Until you close the application of course" – NSNoob Feb 15 '16 at 05:55
  • If you are looking for persistent storage even after you shut down the app, you will need to use CoreData or SQLite or a simple data writing to device's document. I however suggest the first two options – NSNoob Feb 15 '16 at 05:56
  • @NSNoob i use singleton class but same problem.u give me code how to use singleton class – Jigar Feb 15 '16 at 05:56
  • There are scores of questions here on that. There's [This Question](http://stackoverflow.com/questions/34490728/how-to-save-the-response-from-my-server-and-how-can-i-access-that-data/34491126#34491126) where I explained the process myself. – NSNoob Feb 15 '16 at 06:08
  • @NSNoob first i will try singleton class but not problem solving than sfter someone tell me declare array in appdelegate file – Jigar Feb 15 '16 at 06:11
  • App delegate file is a Singleton class as well. Just go and follow the instructions that I gave in the linked question – NSNoob Feb 15 '16 at 06:13
  • @NSNoob ok i will try – Jigar Feb 15 '16 at 06:15
  • @DarjiJigar problem is generated from ` - (IBAction)placeorder:(id)sender ` right? – Vvk Feb 15 '16 at 06:17
  • @VvkAghera pls see this url http://stackoverflow.com/questions/10476787/how-add-values-from-text-field-label-to-an-array-when-a-button-click-in-iphone – Jigar Feb 15 '16 at 06:27
  • @VvkAghera this url quetion is my same quetion. – Jigar Feb 15 '16 at 06:28
  • @DarjiJigar show me your secopnd page and where are you useing myAppDelegate.filteredArray show me – Vvk Feb 15 '16 at 06:30
  • @VvkAghera - (void)viewDidLoad { [super viewDidLoad]; AppDelegate *myAppDelegate = [[UIApplication sharedApplication] delegate]; NSLog(@"new array=%@",myAppDelegate.filteredArray); // Do any additional setup after loading the view. } – Jigar Feb 15 '16 at 06:32
  • Let us [continue this discussion in chat](http://chat.stackoverflow.com/rooms/103457/discussion-between-vvk-aghera-and-darji-jigar). – Vvk Feb 15 '16 at 06:33
  • @DarjiJigar plaese update your second view controller code – Vvk Feb 15 '16 at 10:01

1 Answers1

2

You need to update only - (IBAction)back:(id)sender in Second.m Currently you are presenting the SecondViewController from Viewcontroller.m. When you go to back from Second.m to First you are Pushing the first viewcontroller. you are alloc the new. it will create new reference insted of old, so your old value will not get. Replace your - (IBAction)back:(id)sender method with below code.

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

OR

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

Suggestion: for storing and transfer array to another Viewcontroller you not need to use AppDelegae, NSUserDefault or Singletone class. Directily you have to pass array from one VC to Another VC. i.e Below Code.... SecondVC.h

#import <UIKit/UIKit.h>

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

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];
}
Vvk
  • 4,031
  • 29
  • 51