我正在使用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();
});
});
}
答案 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并在那里设置一个断点,看看它是否已经走得那么远。