2009-11-12 83 views
0

我正在访问一个Web服务,其中我给出了开始日期和结束日期,并作为回报,我从Web服务中获取了一个字符串数组。 字符串数组中的每个字符串均采用此格式 “1 |银行名称|帐户NO | 121 |抽屉名称”。现在我想在表格视图的第一行显示这个内容。 第二行应该被String数组的第二个字符串占用。 我尝试了下面的方式,但我的表似乎是空的。请帮助。在表视图中显示数组的内容

#import "RootViewController.h" 
@implementation RootViewController 

    - (void)viewDidLoad { 
    [super viewDidLoad]; 

    recordResults = FALSE; 

    NSString *soapMessage = [NSString stringWithFormat: 
          @"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" 
          "<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" 
          "<S:Header/\>\n" 
          "<S:Body>\n" 
          "<ns2:reviewDeposit xmlns:ns2=\"http://services.cbp.syntel.org/\">\n" 
          "<FromDate>%@</FromDate>\n" 
          "<ToDate>%@</ToDate>\n" 
          "</ns2:reviewDeposit>\n" 
          "</S:Body>\n" 
          "</S:Envelope>\n", @"Sep 10, 2009", @"Dec 10, 2009" 
          ]; 

    .........bla bla 
} 


    /*.....methods for accessing web service*/ 

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


    if([elementName isEqualToString:@"return"]) 
    { 
     if(!soapResults) 
     { 
      soapResults = [[NSMutableString alloc] init]; 
     } 
     recordResults = TRUE; 
    }} 
    -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ 
    if(recordResults) 
    { 
     //DFSSoapTestAppDelegate *appdel=(DFSSoapTestAppDelegate *)[[UIApplication sharedApplication]delegate]; 

     [soapResults appendString: string]; 
    }} 
    -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ 
    if([elementName isEqualToString:@"return"]) 
    { 

     recordResults = FALSE; 

     //chunks=[soapResults componentsSeparatedByString:@"|"]; 



     //NSString *s=[chunks objectAtIndex:0]; 

     if([soapResults isEqualToString:@"Error"]){ 
      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Sorry Please Refine Your Search" 
                  delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil]; 
      [alert show]; 
      [alert release]; 
      [email protected]""; 
      [email protected]""; 

     }else { 

      [chunks addObject:soapResults];//where chunks is a NSMutable array 

      NSLog(@"The Soap Results are....."); 
      NSLog(soapResults);// "1|Bank Name|Account NO|121|Drawer Name" 

     } 
    } 

    /
} 



    - (void)didReceiveMemoryWarning { 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

    - (void)viewDidUnload { 
    // Release anything that can be recreated in viewDidLoad or on demand. 
    // e.g. self.myOutlet = nil; 
} 




    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {return 1;} 



    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {return [chunks count];} 


    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    // Configure the cell. 
    NSString *cellValue=[chunks objectAtIndex:indexPath.row]; 
    cell.text =cellValue; 
    return cell; 
} 



- (void)dealloc { 
    [super dealloc]; 
} 


@end 

回答

0

解析器完成后,您需要[tableView reloadData]

+0

我试过,但应用程序崩溃。在控制台中没有错误 – shreedevi 2009-11-12 17:26:12

+0

为您的代码添加一些断点,特别是在您的UITableView委托方法和reloadData中。浏览你的代码,看看你能否找到崩溃的根源。最后,在找出位置后,查找具有不正确值的变量。 – 2009-11-12 18:19:15

0

它可能与你调用解析器的地方有关。如果解析器没有运行,那么表格将是空白的。有数据时,您不会显示强制更新表的代码。它可能'tableView:numberOfRowsInSection:'是根本不会在视图的初始加载后调用。

我建议在解析器的末尾记录chucks以确保它实际上具有值。您也可以在填充单元格之前记录它。

我建议将解析器和连接到Web服务的方法移动到与表控制器不同的对象中。一般来说,你想分离控制器和视图的数据的抓取/格式化/管理。在这种特殊情况下,当需要更新表格时,您不希望控制器等待某些回复。相反,你应该有一个模型对象,只需将控制器交给一个数组。这也可以很容易地处理与提取数据有关的错误。