2012-03-22 11 views
5

İşte İşte benim yeniden fonksiyoniOS UITableView reloadData sadece

- (void) reloadTable:(id)sender 
{ 
    NSLog(@"Reload Table"); 
    NSLog(@"%@",[appDelegate queryList]); 
    [self.driverTable reloadData]; 
    [self.driverTable setNeedsLayout]; 
    [self.driverTable setNeedsDisplay]; 
} 

olduğunu ben webcoder verileri aldıktan sonra diyoruz nerede masayı benim yeniden fonksiyonu çağırmak ikinci kez yeniler

if([elementName isEqualToString:@"Response"]) { 
    Response = NO; 
    LookupView *lookupView = [[LookupView alloc] initWithNibName:@"LookupView" bundle:nil]; 
    [lookupView reloadTable:self]; 
} 

Sorun Şu anda bir arama düğmesine basıp veriyi aldıktan sonra bir arama yaptıktan sonra var. Tablo yeni verilerle yenilenmiyor. Tekrar aynı tuşa basarak tekrar arama fonksiyonunu tekrar ararsam, tablo yeniden yüklenir. Şimdi verileri biliyorum çünkü tabloyu yeniden yüklemeden önce diziyi basıyorum.

Herhangi bir fikir neden?

+0

neden setNeedsLayout ve setNeedsDisplay öğesine ihtiyacınız var? UITableViews yeniden çizim ihtiyacı duymuyor, yeniden yükleme zamanında kendileri hallediyorlar. – CodaFi

+0

oh, Ben sadece çözümler için araştırma yapıyordum, benzer sorunları olan bazı insanlar bu yüzden sadece –

+0

deniyordum o şeyler @CodaFi tarafından belirtilen yöntem silin. Orada bulunmuyor. –

cevap

6

Aynı konuyla karşılaştım. Apple'ın belgelerine göre, reloadData "satır ekleyen veya silen yöntemlerde çağrılmamalıdır." Kullandığım bir geçici çözüm, reloadData çağrısını geciktirmek, böylece tabloyu güncelleştirdikten hemen sonra değil. Bu deneyin:

[self performSelector:@selector(delayedReloadData) withObject:nil afterDelay:0.5]; 

uygun yerde delayReloadData aşağıdaki uygulanması ile tablo satırı görünür ise

kısa bir gecikme olduğunu
-(void)delayedReloadData{ 
    [self.tableView reloadData]; 
} 

Bu yaklaşımdan bkz gelmiş etkileyen bir olumsuz yan olduğunu içeriğini göstermeden önce.

+0

tarafından belirtilen satırları kaldırdım. Bu benim için çalışmış gibi görünüyordu –

+0

[this] (http://stackoverflow.com/questions/14018754/why-reloaddata-shouldnt-be-called-on-methods-that -delete-insert-satırları) soru @ bobnoble'ın cevabı – abbood

0

if loop ürününüzde elementName görerek XML ayrıştırma yapıyorsunuz. Ayrıştırma kodunuzda neden load a NIB file'a ihtiyacınız var. Bunun kullanımı nedir? Sadece bunun gibi reloadTable: yöntemini çağırabilirsiniz.

[self reloadTable:self]; 

Sen app delegate dosyasında bazı dizi kullanarak tableView doldururken. Yani temsilcinizi ViewController'ınızda başlattınız mı?

+0

kadar takip edilebilir Evet, haklısınız, app temsilci kullanarak tablo için veri içeren diziyi dolduruyorum. Tüm bilgileri diziye yüklediğimi öğrendiğimde, tablonun görünüm denetleyicisindeki yenileme tablosu işlevini çağırmak için uygulama temsilcisini kullanırım. –

+0

yanlış mesaj ... –