отображать содержимое массива в табличном представлении - PullRequest
0 голосов
/ 12 ноября 2009

Я получаю доступ к веб-службе, где я даю дату начала и дату окончания, а взамен я получаю строковый массив из веб-службы. каждая строка из массива строк находится в этом формате «1 | Название банка | Номер счета | 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];
            startdate.text=@"";
            enddate.text=@"";

        }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

Ответы [ 2 ]

0 голосов
/ 13 ноября 2009

Возможно, это связано с тем, где вы вызываете свой парсер. Если парсер не запустился, то таблица будет пустой. Вы не показываете код, который вызывает обновление таблицы, когда есть данные. Возможно, что tableView: numberOfRowsInSection: просто никогда не вызывается после начальной загрузки представления.

Я бы порекомендовал записать chucks в конце парсера, чтобы убедиться, что в нем действительно есть значения. Вы также можете зарегистрировать его прямо перед заполнением ячеек.

Я бы предложил переместить анализатор и методы для подключения к веб-службам в объект, отличный от контроллера таблицы. В общем, вы хотите отделить выборку / форматирование / управление данными как от контроллера, так и от представления. В этом конкретном случае вы не хотите, чтобы контроллер был связан с ожиданием какого-либо ответа, когда ему нужно обновить таблицу. Вместо этого у вас должен быть объект модели, который просто передает контроллеру массив. Это также облегчит устранение ошибок, связанных с извлечением данных.

0 голосов
/ 12 ноября 2009

Вам нужно будет [tableView reloadData], когда парсер завершит работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...