Xamarin iOS:向下转换segue.DestinationViewController错误

时间:2016-12-16 12:33:13

标签: c# ios xamarin.ios segue

我在Xamarin.iOS中使用导航控制器设置了一个segue。第一个屏幕只是一个具有phoneNumbers列表的ViewController,并在单击按钮时添加到电话号码列表中。单击其他按钮时,我想转到CallHistory2屏幕并显示电话号码列表。但是,我无法将List对象传递到第二个屏幕。

这是ViewController.cs类(第一个屏幕)中的方法

public override void PrepareForSegue (UIStoryboardSegue segue, NSObject sender)
{
   base.PrepareForSegue (segue, sender);

   // set the View Controller that’s powering the screen we’re
   // transitioning to

   var callHistoryContoller = segue.DestinationViewController as CallHistory2;

   //set the Table View Controller’s list of phone numbers to the
   // list of dialed phone numbers

   if (callHistoryContoller != null) {
      callHistoryContoller.PhoneNumbers = PhoneNumbers;
   }
 }

我在此行收到错误

var callHistoryContoller = segue.DestinationViewController as CallHistory2;

无法转换类型' UIKit.UIViewController' to' PortableAppTest.iOS.CallHistory2'通过引用转换,装箱转换,拆箱转换,换行转换或null类型转换PortableAppTest.iOS

当我将CallHistory2更改为UITableViewController时,错误就会消失,但callHistoryController不会包含对我的CallHistory2类的引用(实现{{1}而不是通用的UITableViewController类。

如何解决此问题?任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:0)

尝试以下,它会起作用。

if ( segue.DestinationViewController.GetType() == typeof(CallHistory2))
 {
CallHistory2 callHistoryContoller = (CallHistory2)segue.DestinationViewController
callHistoryContoller.PhoneNumbers = PhoneNumbers;

}

答案 1 :(得分:0)

我希望这可以帮助别人,因为我遇到了同样的问题!

这是来自Xamarins Multiscreen指南

https://developer.xamarin.com/guides/ios/getting_started/hello,_iOS_multiscreen/hello,_iOS_multiscreen_quickstart/

我的问题是该应用程序被称为“PhoneWord”,但此Viewcontroller的代码使用“Phoneword”作为命名空间(注意小写W)

一旦我正确设置它就会按预期工作。