таблица загрузки iphone с wcf - PullRequest
0 голосов
/ 07 декабря 2011

атм. Я могу успешно загружать данные из WFC, читать json и помещать их в нужные объекты.

Но моя проблема возникает, когда мне нужно показать таблицу с этими данными, потому что я не знаю, где играть в метод или когда мне его вызывать. АТМ выглядит так, будто таблица создана, и после этого я получаю данные из Интернета. Должен ли я перезагрузить таблицу или получить информацию до того, как класс вызовет cellForRowAtIndexPath:?

Есть ли способ сделать соединение синхронным, а не синхронным? потому что в этом случае, если я не могу получить список Eventos формы WFC, он не имеет смысла показывать таблицу. Итак

Спасибо заранее!

мой код:

-(id)init{
//call superclass designated inizialzer
self= [super initWithStyle:UITableViewStyleGrouped];
if(self){

    [[self navigationItem] setTitle:@"Eventos"];

    responseData = [[NSMutableData data] retain];   
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://xxx.xxx.xxx.xxx/..."]];

    [[[NSURLConnection alloc] initWithRequest:request delegate:self]autorelease];   


}
return self;
 }

о подключении:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
[responseData setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
 [responseData appendData:data];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
//  label.text = [NSString stringWithFormat:@"Connection failed: %@", [error description]];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {      


NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
[responseData release];


NSError *error;
SBJSON *json = [[SBJSON new] autorelease];
NSDictionary *luckyNumbers = [json objectWithString:responseString error:&error];

[responseString release];   

if (luckyNumbers == nil)
  //        label.text = [NSString stringWithFormat:@"JSON parsing failed: %@", [error localizedDescription]];
    [luckyNumbers release];
else {      


    for (NSDictionary *object in [luckyNumbers objectForKey:@"EResult"]) {
        Evento *e=[[Evento alloc] init];
        e.nombre= [object objectForKey:@"nombre"];
        e._id= (int)[object objectForKey:@"id"];
        e.fecha= [object objectForKey:@"fecha"];
        [[EventoStore defaultStore]addEvento:e];
        [e release];
    }

}
}

о самой таблице:

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

 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

//check for reusable cell first and use it
UITableViewCell *cell= [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"];
//if there is no reusable cell, we create one
if(!cell){
    cell= [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1
                                  reuseIdentifier:@"UITableViewCell"]autorelease];
}
Evento *e=[[[EventoStore defaultStore] allEventos] objectAtIndex:[indexPath row]];
[[cell textLabel] setText:[e nombre]];

return cell;

}

 -(void)tableView:(UITableView *) aTableView didSelectRowAtIndexPath:(NSIndexPath *) indexPax{
LotesViewController *loteViewController= [[[LotesViewController alloc]init]autorelease];

NSArray *eventos=[[EventoStore defaultStore]allEventos];
[loteViewController setEvento: [eventos objectAtIndex:[indexPax row]]];
[[self navigationController]pushViewController:loteViewController animated:YES];
}

1 Ответ

0 голосов
/ 07 декабря 2011

вы должны перезагрузить таблицу после получения данных. Вы можете отображать индикатор активности на столе до тех пор, пока не получите данные, а после получения данных вы можете удалить индикатор активности и перезагрузить таблицу. Таким образом, вы можете найти решение вашей проблемы. Нет необходимости идти по синхронному соединению. Просто добавьте индикатор активности, когда соединение установлено, и удалите его при получении данных.

...