动态Cast类在swift中的无条件问题

时间:2014-08-26 08:27:34

标签: ios uiviewcontroller swift dynamic-cast

在我的应用程序中,我有一个包含顶栏和桌子的视图。通过从议程中的联系人处获取信息来填充桌面视图。

到目前为止一切正常但我想从桌子上选择一个单元格并按下顶部栏上的一个按钮转到另一个视图。不幸的是,这部分根本不起作用。

以下是我的尝试:

class myAgendaTableViewController: UITableViewController ,UINavigationControllerDelegate,ABPeoplePickerNavigationControllerDelegate{
 @IBOutlet var EditButton: UIBarButtonItem!

 @IBOutlet var table: UITableView!


 var objects : NSMutableArray! = NSMutableArray()
 var addressBookController :ABPeoplePickerNavigationController!
 var contactsArray :NSMutableArray! =  NSMutableArray()
 //...........//
 //the method I assigned to the edit button
 @IBAction func pressedEdit(sender: UIBarButtonItem) {
    self.objects.insertObject(NSDate.date(), atIndex: 0)
    var indexPath = NSIndexPath(forRow: 0, inSection: 0)
    var array :NSMutableArray = NSMutableArray()
    var ContactDetailsView : ContactDetails
    ContactDetailsView = self.storyboard.instantiateViewControllerWithIdentifier("Agenda") as ContactDetails
    var personDict = self.contactsArray.objectAtIndex(0) as NSDictionary
    //println(personDict.objectForKey("firstName") ) //the dictionary exists and all

    ContactDetailsView.contactInfo = personDict



    var ceva : myAgendaTableViewController
    ceva = self.storyboard.instantiateViewControllerWithIdentifier("Agenda") as myAgendaTableViewController 
    //this is the line I am getting an error at for some reason 
  }

我得到的错误是 dynamicCastClassUnconditional

enter image description here

我以前做过这次,从来没有遇到过这种错误。

你能解释一下我做错了吗?

5 个答案:

答案 0 :(得分:13)

错误意味着您说as并撒了谎。所以:

ceva = self.storyboard.instantiateViewControllerWithIdentifier("Agenda") as myAgendaTableViewController 

所以你说as myAgendaTableViewController,但是这个对象是而不是 myAgendaTableViewController。

答案 1 :(得分:1)

如果您遇到此问题,请检查以确保已将该类分配给viewcontroller。转到故事板并选择您的viewcontroller,然后在身份检查器面板下确保已为您的viewcontroller分配了类的正确名称。

答案 2 :(得分:0)

我收到了以下错误:

swift_dynamicCastClassUnconditional

Swift动态演员失败

问题代码:每次连接到不同的segue

时,我都在使用CredentialsSetting ViewController
 // programming mark ----- ----- ---- ----- ----- ---- ----- ----- ----

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {

            var detailController = segue.destinationViewController as CredentialsSetting;
            detailController.viewControllerType = self.viewControllerType


    }// end prepareForSegue

解决方案:为了解决这个问题,我已经为不同的连接添加了传输segue的特定条件:

 // programming mark ----- ----- ---- ----- ----- ---- ----- ----- ----

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {


        if self.viewControllerType == "donothavepassword" || self.viewControllerType == "forgotpassword"  {

            var detailController = segue.destinationViewController as CredentialsSetting;
            detailController.viewControllerType = self.viewControllerType


        }


    }// end prepareForSegue

答案 3 :(得分:0)

我遇到了这个问题。 prepareForSegue中出现了问题。相反,我只是自己实例化并推送了视图控制器:

 let controller = self.storyboard?.instantiateViewControllerWithIdentifier("Identifier")
            as MyViewController
 self.navigationController?.pushViewController(controller, animated: true)

答案 4 :(得分:0)

我遇到了这个问题。一切都是正确的,类集,使用适当的标识符。

最后我修改了标识符的名称,'故事板ID'在故事板中。使用修改后的标识符名称

let controller = self.storyboard?.instantiateViewControllerWithIdentifier("IdentifierID")
        as MyViewController

它开始工作了。

希望这对处于类似情况的其他人有用。