Ios 该类不符合密钥的键值编码(我在序列图像板中更改了文件名)

Ios 该类不符合密钥的键值编码(我在序列图像板中更改了文件名),ios,swift,segue,filenames,Ios,Swift,Segue,Filenames,编辑-这不是重复的。即使所有的连接都正确,我仍然得到这个错误。显然,纠正此问题的行动也需要按特定顺序完成。请参阅标记为答案的响应 我改变了故事板中的一个文件名,所有东西都坏了。我得到的错误是“这个类不是键值编码兼容的关键”,但我不认为这是真正的问题。我有一个名为Draft的viewcontroller和另一个名为Draft2的viewcontroller。在我的故事板上,我将文件名从Draft更改为Draft3,然后将Draft2更改为Draft。我分别更改了类的名称,然后删除了序列并重新创建它

编辑-这不是重复的。即使所有的连接都正确,我仍然得到这个错误。显然,纠正此问题的行动也需要按特定顺序完成。请参阅标记为答案的响应

我改变了故事板中的一个文件名,所有东西都坏了。我得到的错误是“这个类不是键值编码兼容的关键”,但我不认为这是真正的问题。我有一个名为Draft的viewcontroller和另一个名为Draft2的viewcontroller。在我的故事板上,我将文件名从Draft更改为Draft3,然后将Draft2更改为Draft。我分别更改了类的名称,然后删除了序列并重新创建它们。我还分别更改了视图控制器标题和情节提要Id。我真的不在乎Draft3,因为它最终会被删除,但我需要Draft(新版本)才能工作

我已重新连接名为Draft的新Viewcontroller的所有插座。我还尝试过清理程序(cmd+shift+k)。我已尝试保存和关闭

这是怎么回事

这是我的草稿viewController的一部分

class Draft: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, UISearchBarDelegate {


@IBOutlet weak var battlegroundName: UILabel!
@IBOutlet weak var draftStatus: UILabel!
@IBOutlet weak var draftNotes: UILabel!

@IBOutlet weak var collectionHeroPool: UICollectionView!
@IBOutlet weak var collectionTeam1Bans: UICollectionView!
@IBOutlet weak var collectionTeam2Bans: UICollectionView!
@IBOutlet weak var collectionTeam1Picks: UICollectionView!
@IBOutlet weak var collectionTeam2Picks: UICollectionView!

@IBAction func undoButton(sender: AnyObject) {
    self.navigationController?.popViewControllerAnimated(true)
    self.navigationController?.navigationBarHidden = false
    //dismissViewControllerAnimated(false, completion: nil)
}

var team1First = true
var battleground: Battleground!
var team1 = [Hero]()
var team2 = [Hero]()
var turn = 1
var team1Active = true
var activeTeam = [Hero]()

var team1Bans = [Int: Hero]()
var team2Bans = [Int: Hero]()
var team1Picks = [Int: Hero]()
var team2Picks = [Int: Hero]()
var bans1 = [1,9]
var bans2 = [2,8]
var picks1 = [3, 6, 7, 12, 13]
var picks2 = [4, 5, 10, 11, 14]
var pickedHeroes = [Hero]()




override func viewDidLoad() {
    super.viewDidLoad()


    let value = UIInterfaceOrientation.LandscapeLeft.rawValue
    UIDevice.currentDevice().setValue(value, forKey: "orientation")
    self.navigationController?.navigationBarHidden = true

    battlegroundName.text = battleground.name
这段代码在我的预起草中,将继续起草

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

    if segue.identifier == "preDraftToDraft3" {// if this is the segue being loaded with this identifier
        if let detailsVC = segue.destinationViewController as? Draft3 { // grab the view control we will go to and cast it as the hero detail class
                detailsVC.team1First = team1First!
                //print(selectedMap!.name)
                detailsVC.battleground = selectedMap
                //print(detailsVC.battleground.name)
        }
    }
    if segue.identifier == "preDraftToDraft" {// if this is the segue being loaded with this identifier
        if let detailsVC = segue.destinationViewController as? Draft { // grab the view control we will go to and cast it as the hero detail class
            detailsVC.team1First = team1First!
            //print(selectedMap!.name)
            detailsVC.battleground = selectedMap
            //print(detailsVC.battleground.name)
        }
    }
}
@IBAction func startDraft(sender: AnyObject) {
    if team1First != nil && selectedMap != nil {
        performSegueWithIdentifier("preDraftToDraft", sender: nil)
    }
}

问题是故事板中的一个出口在类本身中找不到。 检查您的类是否具有与脚本视图控制器的“引用出口”部分中相同的名称的IBOutlet

例如:

如果有“按钮”,则视图控制器中必须有此行:

@IBOutlet weak var button: UIButton!

实际上,你做了所有正确的事情,但顺序不对。 您需要遵循以下步骤:-

  • 首先拆除所有IB插座、IBAction和Segue
  • 然后更改ViewController源文件中的类名
  • 然后在故事板中更改ViewController场景的类名
  • 现在连接Segues、iBouts和iBaction
  • 清洁、建造和运行。这应该行得通

  • 干杯

    谢谢,这是有效的,我从来没有想到有一个“必要的”订单。