Marking
Marking

Reputation: 184

XML Parsing data not getting from viewController to tableViewController in objective c?

I am getting xml data from the server successfully, but i am unable to send that data from viewController to tableViewController properly. What exactly i want to do send the data, this is my code......

In viewController...

- (IBAction)parserButtonClicked:(UIButton *)sender {

    [self.appTitleArray removeAllObjects];
    [self.releaseDateArray removeAllObjects];
    [self.summeryArray removeAllObjects];
    [self.priceArray removeAllObjects];
    [self.imageArray removeAllObjects];

    DisplayAppsTableViewController *datvc = [self.storyboard instantiateViewControllerWithIdentifier:@"DATVC"];

    if ((self.countrySegmentControl.selectedSegmentIndex == 0 || self.countrySegmentControl.selectedSegmentIndex == 1 || self.countrySegmentControl.selectedSegmentIndex == 2) && (self.categorySegmentControl.selectedSegmentIndex == 0 || self.categorySegmentControl.selectedSegmentIndex == 1) && (self.countSegmentControl.selectedSegmentIndex == 0 || self.countSegmentControl.selectedSegmentIndex == 1 || self.countSegmentControl.selectedSegmentIndex == 2 || self.countSegmentControl.selectedSegmentIndex == 3)) {

        [self stringManipulation];
//This is the link rom stringManipulation method
// https://itunes.apple.com/in/rss/topfreeapplications/limit=10/xml
// https://itunes.apple.com/in/rss/toppaidapplications/limit=10/xml

self.URLRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:self.XMLurl]];

self.URLSession = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

self.dataTask = [self.URLSession dataTaskWithRequest:self.URLRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

        self.XMLParser = [[NSXMLParser alloc]initWithData:data];

        self.XMLParser.delegate = self;

        BOOL success = [self.XMLParser parse];

            if (success) {
                NSLog(@"Parse success");
            } else {
                NSLog(@"Parse not success");
            }

     }];
        [self.dataTask resume];

}

    datvc.appTitleArray1 = self.appTitleArray;
    datvc.releaseDateArray1 = self.releaseDateArray;
    datvc.priceArray1 = self.priceArray;
    datvc.summeryArray1 = self.summeryArray;
    datvc.imageArray1 = self.imageArray;
    NSLog(@"Here it's NOT printing data successfully : %@", datvc.appTitleArray1);

    [self.navigationController pushViewController:datvc animated:YES];

}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(NSDictionary<NSString *, NSString *> *)attributeDict {

    self.element = elementName;

   if([elementName isEqualToString:@"im:releaseDate"]) {

        NSString *date=[attributeDict objectForKey:@"label"];
    [self.releaseDateArray addObject:date];
   }

}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {

    NSString *trimmedString = [string stringByTrimmingCharactersInSet:
                           [NSCharacterSet whitespaceAndNewlineCharacterSet]];

    if (trimmedString.length > 0) {

        if ([self.element isEqualToString:@"im:name"]) {
        [self.appTitleArray addObject:string];
        }
        if ([self.element isEqualToString:@"summary"]) {
        [self.summeryArray addObject:string];
        }
        if ([self.element isEqualToString:@"im:price"]) {
        [self.priceArray addObject:string];
        }
        if ([self.element isEqualToString:@"im:image"]) {
        [self.imageArray addObject:string];
        }

    }

    NSLog(@"Here it's parsing data successfully : %lu",     [self.appTitleArray count]);
}

In tableViewController

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    NSLog(@"Not getting data from viewController : %lu",  [self.releaseDateArray1 count]);

    return [self.releaseDateArray1 count];
}

Upvotes: 0

Views: 57

Answers (2)

Anbu.Karthik
Anbu.Karthik

Reputation: 82769

not like

DisplayAppsTableViewController *datvc = [self.storyboard instantiateViewControllerWithIdentifier:@"DATVC"];

    if ((self.countrySegmentControl.selectedSegmentIndex == 0 || self.countrySegmentControl.selectedSegmentIndex == 1 || self.countrySegmentControl.selectedSegmentIndex == 2) && (self.categorySegmentControl.selectedSegmentIndex == 0 || self.categorySegmentControl.selectedSegmentIndex == 1) && (self.countSegmentControl.selectedSegmentIndex == 0 || self.countSegmentControl.selectedSegmentIndex == 1 || self.countSegmentControl.selectedSegmentIndex == 2 || self.countSegmentControl.selectedSegmentIndex == 3)) {

        [self stringManipulation];
//This is the link rom stringManipulation method
// https://itunes.apple.com/in/rss/topfreeapplications/limit=10/xml
// https://itunes.apple.com/in/rss/toppaidapplications/limit=10/xml

self.URLRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:self.XMLurl]];

self.URLSession = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

self.dataTask = [self.URLSession dataTaskWithRequest:self.URLRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

        self.XMLParser = [[NSXMLParser alloc]initWithData:data];

        self.XMLParser.delegate = self;

        BOOL success = [self.XMLParser parse];

            if (success) {
                NSLog(@"Parse success");
            } else {
                NSLog(@"Parse not success");
            }

     }];
        [self.dataTask resume];

}

    datvc.appTitleArray1 = self.appTitleArray;
    datvc.releaseDateArray1 = self.releaseDateArray;
    datvc.priceArray1 = self.priceArray;
    datvc.summeryArray1 = self.summeryArray;
    datvc.imageArray1 = self.imageArray;
    NSLog(@"Here it's NOT printing data successfully : %@", datvc.appTitleArray1);

    [self.navigationController pushViewController:datvc animated:YES];

do like

reason : you are called the additional thread , in it will take some additional time for execution , after the successful execution you need to navigate.

    if ((self.countrySegmentControl.selectedSegmentIndex == 0 || self.countrySegmentControl.selectedSegmentIndex == 1 || self.countrySegmentControl.selectedSegmentIndex == 2) && (self.categorySegmentControl.selectedSegmentIndex == 0 || self.categorySegmentControl.selectedSegmentIndex == 1) && (self.countSegmentControl.selectedSegmentIndex == 0 || self.countSegmentControl.selectedSegmentIndex == 1 || self.countSegmentControl.selectedSegmentIndex == 2 || self.countSegmentControl.selectedSegmentIndex == 3)) {

        [self stringManipulation];
//This is the link rom stringManipulation method
// https://itunes.apple.com/in/rss/topfreeapplications/limit=10/xml
// https://itunes.apple.com/in/rss/toppaidapplications/limit=10/xml

self.URLRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:self.XMLurl]];

self.URLSession = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

self.dataTask = [self.URLSession dataTaskWithRequest:self.URLRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

        self.XMLParser = [[NSXMLParser alloc]initWithData:data];

        self.XMLParser.delegate = self;

        BOOL success = [self.XMLParser parse];

            if (success) {
                NSLog(@"Parse success");

               dispatch_sync(dispatch_get_main_queue(), ^{
// Update the UI on the main thread.





                   DisplayAppsTableViewController *datvc = [self.storyboard instantiateViewControllerWithIdentifier:@"DATVC"];
                  datvc.appTitleArray1 = self.appTitleArray;
    datvc.releaseDateArray1 = self.releaseDateArray;
    datvc.priceArray1 = self.priceArray;
    datvc.summeryArray1 = self.summeryArray;
    datvc.imageArray1 = self.imageArray;
    NSLog(@"Here it's NOT printing data successfully : %@", datvc.appTitleArray1);

    [self.navigationController pushViewController:datvc animated:YES];
     });
            } else {
                NSLog(@"Parse not success");
            }

     }];
        [self.dataTask resume];

}

Upvotes: 1

Matloob Hasnain
Matloob Hasnain

Reputation: 1037

  if (success) 
 {
    NSLog(@"Parse success");
    datvc.appTitleArray1 = self.appTitleArray;
    datvc.releaseDateArray1 = self.releaseDateArray;
    datvc.priceArray1 = self.priceArray;
    datvc.summeryArray1 = self.summeryArray;
    datvc.imageArray1 = self.imageArray;
    NSLog(@"Here it's NOT printing data successfully : %@",         datvc.appTitleArray1);

    [self.navigationController pushViewController:datvc animated:YES];
 } 
else 
{
     NSLog(@"Parse not success");
}

Plese try this Its happening because you are setting data before parsing.

Upvotes: 1

Related Questions