2016-10-10 1 views
-1

EDIT - Ceci n'est pas un doublon. Même après que toutes les connexions ont été faites correctement, j'ai toujours cette erreur. Les actions visant à corriger ce problème devaient également être complétées dans un ordre spécifique. Voir la réponse marquée comme réponse.cette classe n'est pas compatible avec le codage de valeur de clé pour la clé (j'ai changé un nom de fichier dans Storyboard)

J'ai changé un nom de fichier dans Storyboard et tout s'est cassé. Je reçois l'erreur "cette classe n'est pas conforme à la valeur clé codage-conforme pour la clé" mais je ne pense pas que c'est en fait le problème. J'ai un viewcontroller nommé Draft et un autre viewcontroller nommé Draft2. Sur mon storyboard, j'ai changé le nom de fichier de Brouillon en Brouillon3, puis Brouillon2 en brouillon. J'ai changé les noms des classes respectivement, puis j'ai supprimé les pages et les ai recréées. J'ai également changé les identifiants Title et Storyboard du contrôleur de vue respectivement. Je ne me soucie pas vraiment de Draft3 car il sera éventuellement supprimé mais j'ai besoin de Draft (la nouvelle version) pour fonctionner.

J'ai reconnecté toutes les prises pour le nouveau Viewcontroller nommé Draft. J'ai aussi essayé de nettoyer le programme (cmd + shift + k). J'ai essayé d'enregistrer et de fermer.

Que se passe-t-il ici?

Cela fait partie de mon projet 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 

Ce code est dans mon predraft que segues au projet de

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) 
    } 
} 

Répondre

1

En fait, vous avez effectué toutes les bonnes actions, mais dans le mauvais ordre. Vous devez suivre les étapes ci-dessous: -

  1. Supprimez d'abord toutes les IBOutlets, IBActions et Segues.
  2. Modifiez ensuite les noms de classe dans les fichiers source de ViewControllers.
  3. Modifiez ensuite le nom de la classe dans Storyboard pour les scènes ViewController.
  4. Connectez maintenant Segues, IBOutlets et IBActions.
  5. Nettoyez, construisez et exécutez. Cela devrait fonctionner.

Cheers!

+0

Merci, Cela a fonctionné, je n'aurais jamais compris qu'il y a un ordre "nécessaire". – Apple

0

Le problème est que l'un des points de vente dans le story-board ne peut pas être trouvé dans la classe elle-même. Vérifiez que votre classe a un IBOutlet avec le même nom, comme vous l'avez vu dans la section storyboard du contrôleur.

Par exemple:

enter image description here

Si vous avez « bouton » là, vous devez avoir cette ligne dans le contrôleur de vue:

@IBOutlet weak var button: UIButton!