2016-12-16 3 views
1

Я установил segue с контроллером навигации в Xamarin.iOS. Первый экран - это только ViewController, у которого есть список номеров телефонов, и добавляется к списку номеров телефонов при нажатии кнопки. Когда нажимается другая кнопка, я хочу перейти на экран CallHistory2 и отобразить список телефонных номеров. Однако мне не удается передать объект List во второй экран.Xamarin iOS: Downcasting segue.DestinationViewController Error

Это метод в классе 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» в ' PortableAppTest.iOS.CallHistory2 'посредством эталонного преобразования, преобразования бокса, преобразования для распаковки, конвертации упаковки или преобразования нулевого типа PortableAppTest.iOS

Когда я меняю CallHistory2 - UITableViewController ошибка уходит, но тогда callHistoryController не будет содержать ссылку на мой класс CallHistory2 (реализует UITableViewController), а скорее на общий класс UITableViewController.

Как мне решить эту проблему? Любая помощь приветствуется!

ответ

0

Попробуйте следовать, он будет работать.

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

} 
+0

Я получаю эту ошибку, когда я пытаюсь это сделать: Невозможно преобразовать тип 'UIKit.UIViewController' в 'PortableAppTest.iOS.CallHistory2'. В нем говорится, что потенциальное исправление удаляет избыточный листинг '(CallHistory2)', но когда я удаляю его, я получаю эту ошибку: «Невозможно неявно преобразовать тип« UIKit.UIViewController »в« PortableAppTest.iOS.CallHistory2 »» –

+0

Какой тип вашего CallHistyory2 ? Я имею в виду, что такое базовый класс? – Darshana

+0

UITableViewController –

0

Я надеюсь, что это поможет кому-то другому, поскольку я столкнулся с той же проблемой!

Это из Xamarins Multiscreen руководства

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

И вопрос для меня было то, что приложение называется «PhoneWord», но код этого ViewController использовал «Phoneword» в качестве пространства имен (обратите внимание нижний регистр W)

Как только я правильно его установил, он работал, как ожидалось.

Смежные вопросы