2017-03-07 40 views
0

我正在從服務器成功地獲取xml數據,但我無法正確地將該數據從viewController發送到tableViewController。究竟我想要做的發送數據,這是我的代碼......XML解析數據不是從viewController到目標c中的tableViewController?

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

在tableViewController

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

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

    return [self.releaseDateArray1 count]; 
} 
+0

改變導航來電 –

回答

1

不喜歡

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

不喜歡

理由:你被稱爲額外的線程,它會採取一些額外的時間來執行,你需要成功執行後導航。

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

} 
+0

是的,它,工作成功,但它,立即導航 – Marking

+0

@VadlaniMarking - 數據正在接受或否則您需要任何其他 –

+0

成功接收數據.... – Marking

1
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"); 
} 

請嘗試此操作,因爲您在解析之前正在設置數據。

+0

的序列,但它沒有導航.... – Marking

+0

難道要成功塊? –

+0

是的,它會... – Marking