1

初期ロード時に、テーブルに触れるか別のタブに移動して戻るまでテーブルが空であることを除いて、正常に動作するTabBarControllerアプリがあります( http://cl.ly/3I0r1v2b420t0L1X1h2w)。DialogViewController

設定されていることを確認しましたRoot。afterを発行してみましReloadData()た。TableView.Sourceまた、直接設定してみました。いずれの場合TableViewも、別のアクションが発生するまで何も表示されません。

これは、シミュレーターと iPhone で発生します。

なぜこれが考えられるのでしょうか?

public partial class PapersView : DialogViewController
{
    public PapersView () : base (UITableViewStyle.Plain, null, true)
    {
        EnableSearch = true; 
        AutoHideSearch = true;
        SearchPlaceholder = @"Find Papers";
    }

    public override void ViewDidLoad ()
    {
        base.ViewDidLoad ();

        MonoTouch.UIKit.UIApplication.SharedApplication.NetworkActivityIndicatorVisible = true;
        var svc = new PaperService ();
        svc.GetPapers (onPapersReceived, onErrorReceived);
    }

    private void onErrorReceived (string error)
    {
        MonoTouch.UIKit.UIApplication.SharedApplication.NetworkActivityIndicatorVisible = false;
    }

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

        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);
    }
}
4

2 に答える 2

3

Curtis Baileyは、MonoTouchメーリングリストでInvokeOnMainThreadを調べるように私を指さしました。非同期サービス呼び出しはバックグラウンドスレッド上にあり、コールバックも同様であるため、これでこの問題は解決しました。

    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);
        });
    }
于 2012-04-11T01:40:15.527 に答える
1

新しいルートを作成する代わりに、既存のルートに入力してみてください。

DialogViewController の MonoTouch.Dialog ソースを見ると、PrepareRoot() メソッドが見つかるはずです。それがどこで呼び出されているかを確認すると、意味がわかり始めるはずです。

于 2012-04-10T22:54:56.407 に答える