2013-07-04 3 views
1

У меня проблема: обновите данные в UITableView. Я хочу получить новые данные от parseXML, которые отвечают на сервере, и они обновляют новые данные до UITableView. ** Я использовал код ниже, но он не показывает новые данные в представлении таблицы. Я написал UpdateArray() функцию, чтобы проверить новые данные, а затем я сравниваю 2 массива, если дифф [Array count] то я называю [tableview reloadData];Обновить данные и показать их на UITableView iOS

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

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

    } 

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
     return 90; 
    } 



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


      UILabel *FileNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 100, 30)]; 
      FileNameLabel.backgroundColor = [UIColor clearColor]; 
      FileNameLabel.font = [UIFont fontWithName:@"Helvetica" size:16]; 
      FileNameLabel.font = [UIFont boldSystemFontOfSize:16]; 
      FileNameLabel.textColor = [UIColor blackColor]; 
      NSLog(@"Reseversed TEMP array %@",temp); 
      FileNameLabel.text =[temp objectAtIndex:indexPath.row]; 
      [cell.contentView addSubview: FileNameLabel]; 
      [FileNameLabel release]; 

      UILabel *UploadTimeLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 20, 300, 25)]; 

      UploadTimeLabel.backgroundColor = [UIColor clearColor]; 
      UploadTimeLabel.font = [UIFont fontWithName:@"Helvetica" size:14]; 
      UploadTimeLabel.textColor = [UIColor grayColor]; 
      UploadTimeLabel.text = [UploadTimeArray objectAtIndex:indexPath.row]; 
      [cell.contentView addSubview: UploadTimeLabel]; 
      [UploadTimeLabel release]; 

      UILabel *CompleteLabel = [[UILabel alloc] initWithFrame:CGRectMake(140, 12, 170, 25)]; 
      CompleteLabel.backgroundColor = [UIColor clearColor]; 
      CompleteLabel.font = [UIFont fontWithName:@"Helvetica" size:14]; 
      CompleteLabel.textColor = [UIColor darkGrayColor]; 
      CompleteLabel.text [email protected]"Completed"; 
      CompleteLabel.textAlignment = NSTextAlignmentRight; 
      [cell.contentView addSubview: CompleteLabel]; 
      [CompleteLabel release]; 
     } 
      return cell; 
    } 

UpdateArray()

-(void)updateArray{ 

    while (loop) 
    { 
     [NSThread sleepForTimeInterval:4.0]; 

     [FileCompletedArray removeAllObjects]; 
    // [temp removeAllObjects]; 
     .... 
     AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:afRequest]; 

     [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 
      NSLog(@"Success"); 
      NSString * parsexmlinput = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; 
      NSLog(@"Response in Loop CompleteView: %@", parsexmlinput); 
      // dispatch_async(dispatch_get_main_queue(), ^{ 
       [self parseXMLFile:parsexmlinput]; 

      NSLog(@"File Completed array: %@", FileCompletedArray); 
      NSLog(@"File Temp out array: %@", temp); 
      NSLog(@"File Completed count: %lu",(unsigned long)[ FileCompletedArray count]); 
      NSLog(@"File Temp out count: %lu", (unsigned long)[temp count]); 
      // NSLog(@"State: %@", state); 

      if([FileCompletedArray count ] != [temp count]) 
      { 
       [temp removeAllObjects]; 
       temp= [FileCompletedArray mutableCopy]; 
       [_tableView reloadData]; 
      } 
      else 
      { 
       NSLog(@"2 array equal"); 
      } 
    //}); 
     } 
     failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
               NSLog(@"error: %@", error); 

              } 
     ]; 
     [httpClient enqueueHTTPRequestOperation:operation]; 
    } 
} 

Можете ли вы мне помочь? Заранее спасибо.

+0

, но условие if возвращает YES и входит в область и выполняет reloadData? после этого вызывается число строк, а temp ary правильно? возможно, установить точку останова за «static NSString» CellIdentifier = @ «Cell»; ' – geo

+0

. Если сравнить массив 2, он всегда равен, хотя сервер имеет новые данные. Я ошибаюсь, какой шаг? – NGOT

+0

Это еще одна проблема, которую вы должны исследовать. возможно, проверьте '[self parseXMLFile: parsexmlinput];'. также содержимое 'NSLog (@" File Completed array:% @ ", FileCompletedArray); NSLog (@ «Файл Temp out array:% @», temp); 'может быть хорошей информацией. вы хотите обновить только при появлении новых строк или при обновлении данных? и вы должны выглядеть лучше для соглашений об именах, именование переменных с отличным начальным - это плохая практика;) – geo

ответ

1

Я не вижу, что вы вызываете reloadData.

EDIT:

Вы должны проверить, что

1-Temp оказывает объекты я имею в виду, что [число темп] не возвращается к нулю.

2-Сработало условие if, проверяющее два массива. Я имею в виду, что вызывается информация перезагрузки.

3-Вы можете сделать точку останова после cell.contetview addubview и проверить, что содержит ячейка?

+0

Спасибо, я обновил свой код – NGOT

+0

Работает ли он сейчас? –

+0

НЕТ, это не работает. Я не знаю почему. – NGOT

0

перед вызовом

[_tableView reloadRowsAtIndexPaths:[_tableView indexPathsForVisibleRows] 
           withRowAnimation:UITableViewRowAnimationNone]; 

вы должны вызвать

[_tableView beginUpdates]; 
... 
[_tableView endUpdates]; 

или позвоните

[_tableView reloadData]; 
+0

Я назвал [_tableView reloadData]; но это не перезагружает tableView. Благодарю. Есть ли у вас другое предложение? – NGOT

0

Если обновить представление таблицы, то попробуйте эту линию & чек:

[[self mytableview] reloadData]; 

mytableview - это объект таблицы, который вы здесь указываете для своего объекта tableview.

Смежные вопросы