2012-11-14 10 views
5

Ich habe ein Problem beim Implementieren von UIRefreshControl - in dem, wenn Sie herunterziehen, funktioniert der 'Blob' völlig einwandfrei und die Aktualisierung Spinner funktioniert gut, aber die Tabelle nicht scrollen bis zu der Spinner beim Auffrischen. Stattdessen bleibt sie, wo es war, bis die Auffrischung abgeschlossen ist, an welcher Stelle es auf den oberen Rand des Bildschirms gibtUIRefreshControl: UITableView 'stecken' während der Aktualisierung

Der Code, der die erfrischende tut, ist:

- (void)viewDidLoad { 
    self.refreshControl = [[UIRefreshControl alloc] init]; 
    [self.refreshControl addTarget:self action:@selector(refreshView:)forControlEvents:UIControlEventValueChanged]; 
} 

- (void)refreshView:(UIRefreshControl *)refresh { 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     (...code to get new data here...) 
     [self.refreshControl endRefreshing]; 
    } 
} 

ich, dass ohne dispatch_async gefunden, auch der Refresh-Spinner funktioniert nicht - und das Bit, das heruntergezogen wurde, erscheint nur weiß

Hat jemand irgendwelche Hinweise, was ich falsch machen könnte? Alle Beispiele für die Implementierung ich gefunden habe, scheint zu passen, was ich tue, und ich habe nichts in der API-Dokumentation gefunden, schlage ich vor, bin etwas aus

+0

Aber ich ** sagte Ihnen ** UIKit aus dem Haupt-Thread aufrufen! –

Antwort

16

fehlt Sie zu folgenden ändern können

- (void)refreshView:(UIRefreshControl *)refresh { 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     // (...code to get new data here...) 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      //any UI refresh 
      [self.refreshControl endRefreshing]; 
     }); 
    }); 
} 

-refreshView: wird im Hauptthread aufgerufen, und alle UI-Updates verwenden den Hauptthread. Also, wenn Sie den Haupt-Thread für "Code verwenden, um neue Daten zu bekommen" wird es "stecken"

+0

Das scheint perfekt funktioniert zu haben - ich musste auch ein Update ähnlich wie http://stackoverflow.com/questions/10605038/index-17-beyond-bounds-for-empty-array-tableview implementieren, indem ich alte Daten nutze indexPath.row ist nicht in meinem Daten-Array - was neu für iOS-Entwickler ist Ich bin mir sicher, ich werde verstehen, warum in der Zeit :) Danke! – thatdamnqa

+0

GCD scheint schwer, wenn Sie beginnen. Es ist ziemlich gut Queue und Threading Framework, Sie werden es genießen. Froh, dass es geklappt hat. –

Verwandte Themen