Monotouch iOS - 从功能执行PerformSegue

时间:2013-10-03 14:21:15

标签: ios azure xamarin.ios azure-mobile-services

我正在使用Monotouch / Xamarin示例并尝试将故事板segue和Windows Azure移动服务(WAMS)身份验证拼接在一起。我各自独立工作,但我似乎无法在有效的WAMS登录后触发segue。 DoLogin()函数中没有抛出任何错误,并且AlertView正常工作。它似乎跳过了PerformSegue。 ViewDidLoad()中的PerformSegue工作正常。

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

        btn_Facebook.TouchUpInside += (sender, e) => {
            Console.WriteLine("Facebook clicked");
            DoLogin(MobileServiceAuthenticationProvider.Facebook);
        };

        btn_Twitter.TouchUpInside += (sender, e) =>
        {
            Console.WriteLine("Twitter clicked");
            this.PerformSegue("seg_Login", this);
            // DoLogin(MobileServiceAuthenticationProvider.Twitter);
        };
}

private void DoLogin(MobileServiceAuthenticationProvider provider)
    {
        string applicationKey = "[removed]";
        string applicationUrl = "https://[removed].azure-mobile.net/";

        MobileServiceClient client = new MobileServiceClient(applicationUrl, applicationKey);

        var task = client.LoginAsync(this, provider).ContinueWith(t =>
        {
           MobileServiceUser user = t.Result;

           this.BeginInvokeOnMainThread(() =>
           {
               this.PerformSegue("seg_Login", this);

               UIAlertView alert = new UIAlertView("Logged In!", string.Format("Hello user {0}", user.UserId), null, "OK");
               alert.Show();
           });
        });
    }

2 个答案:

答案 0 :(得分:1)

这也让Xamarin的支持工程师难以接受,并且已将其作为错误提交。但是,我找到了一个非常简单的补充,让这个工作。通过添加计时器并创建半秒延迟,我终于能够触发segue。

this.BeginInvokeOnMainThread(() =>
            {
                Timer tm = new Timer(new TimerCallback((state) =>
                {
                    this.InvokeOnMainThread(new NSAction(() =>
                    {
                        this.PerformSegue("seg_Login", this);
                    }));
                }), null, 500, Timeout.Infinite);
            });

答案 1 :(得分:0)

当前的实现类是否实现了prepareforseque,或者您是否真的将它全部推送到故事板。 我建议实施prepareforseque并在那里设置一个断点,看看它是否已经走得那么远。