2012-04-10 2 views
1

Ich habe eine TabBarController App mit einer DialogViewController, die gut funktioniert, außer dass beim ersten Laden die Tabelle leer ist, bis ich sie berühre oder zu einer anderen Registerkarte und zurück (http://cl.ly/3I0r1v2b420t0L1X1h2w) navigieren.MonoTouch DialogViewController ist leer bis Touched

Ich habe bestätigt, dass Root eingestellt ist. Ich habe versucht, eine ReloadData() nachher auszugeben. Ich habe auch versucht, die TableView.Source direkt einzustellen. In jedem Fall zeigt die TableView nichts bis eine andere Aktion auftritt.

Dies geschieht im Simulator und auf dem iPhone.

Irgendeine Idee, warum das sein könnte?

+0

Welche Ereignisse werden (oder nicht) bei der Anfangslast gegenüber der 2. Belastung aufgerufen? – Jason

+0

Wenn ich verstehe, was Sie fragen ... Ich setze Haltepunkte in allen Methoden und diese werden nur einmal aufgerufen, wenn die App initialisiert wird. Ich berühre dann die UITableView und die Daten werden angezeigt, während ich blättern. Das gleiche Ergebnis, wenn ich einen anderen Tab drücke und zurückkomme ... nichts anderes wird in diesem DialogViewController aufgerufen, aber die Daten werden angezeigt. –

Antwort

3

Curtis Bailey wies mich auf die MonoTouch-Mailingliste, um InvokeOnMainThread zu sehen. Das löste dieses Problem, da der asynchrone Dienstaufruf auf einem Hintergrundthread war und auch der Rückruf.

private void onPapersReceived (List<PaperNode> papers) 
    { 
     MonoTouch.UIKit.UIApplication.SharedApplication.NetworkActivityIndicatorVisible = false; 

     InvokeOnMainThread (delegate { 
      Root = new RootElement("Papers") { 
        from node in papers 
         group node by (node.paper.title [0].ToString().ToUpper()) into alpha 
         orderby alpha.Key 
        select new Section (alpha.Key){ 
         from eachNode in alpha 
         select (Element)new WhitePaperBible.iOS.UI.CustomElements.PaperElement (eachNode) 
      }}; 

      TableView.ScrollToRow (NSIndexPath.FromRowSection (0, 0), UITableViewScrollPosition.Top, false); 
     }); 
    } 
1

Versuchen Sie, nur die vorhandene Root zu füllen, anstatt eine neue Root zu erstellen.

Wenn Sie in MonoTouch.Dialog-Quellen nach DialogViewController suchen, sollten Sie die PrepareRoot() -Methode finden. Schau, wo das heißt und es sollte Sinn ergeben.