Reputation: 184
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
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
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