web-dev-qa-db-fra.com

Comment corriger l'erreur: cette classe n'est pas compatible avec le codage des valeurs de clé pour la clé tableView. '

J'ai créé une application avec Table View et Segmented Control, et c'est la première fois. J'utilise du code et des tutoriels, mais cela ne fonctionne pas. Lorsque j'exécute mon application, il se bloque et affiche cette erreur dans les journaux:

MyApplication [4928: 336085] * Application terminée en raison d'une exception non interceptée 'NSUnknownKeyException', raison: '[setValue: forUndefinedKey:]: cette classe n'est pas compatible avec le codage de la valeur clé pour la clé tableView.' Pellicule de premier niveau: (0 CoreFoundation) UHFQ [UIViewController _loadViewFromNibNamed: bundle:] + 381 9 UIKit 0x0000000103c3f202 - [UIViewController loadview] + 178 10 UIKit 0x0000000103c3f560 - [UIViewController loadViewIfRequired] + 138 11 UIKit 0x0000000103c3fcd3 - [voir UIViewController] + 27 12 UIKit 0x000000010440b024 - [_ UIFullscreenPresentationController _setPresentedViewController:] + 87 13 UIKit 0x0000000103c0f5ca - [UIPresentationController initWithPresentedViewController: presentingViewController:] + 133 14 UIKit 0x0000000103c525bb - [UIViewController _presentViewController: withAnimationController: achèvement:] + 4002 15 UIKit 0x0000000103c5585c - [UIViewController _performCoordinatedPresentOrDismiss: animé:] + 489 16 UIKit 0x0000000103c5536b - [UIViewController presentViewController: animé: achèvement:] + 179 17 UIKit 0x00000001041feb8d __67- [UIStoryboardModalSegueTemplate newDefaultPerformHandlerForSegue:] _ block_invoke + 243 18 UIKit 0x00000001041ec630 - [UIStoryboardSegueTemplate _performWithDestinationViewController: expéditeur:] + 460 19 UIKit 0x00000001041ec433 - [UIStoryboardSegueTemplate _perform:] + 82 20 UIKit 0x00000001041ec6f7 - [UIStoryboardSegueTemplate effectuer:] + 156 21 UIKit 0x0000000103aa6a8d - [UIApplication sendAction: to: à partir de: forEvent:] + 92 22 UIKit 0x0000000103c1a143 - 27 24 UIKit: 0x = F-F-F-F-F-F-F-F-F - F-F-F-F-F-F-F-F-F-F-F - F-F-F-F-F - F-F-F-F-F-F - F-F-F - F _UIApplicationHandleEventQueue + 6660 29 CoreFoundation 0x0000000105095301 _CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION_ + 17 30 CoreFoundation 0x000000010508b22c __CFRunLoopDoSources0 + 556 31 CoreFoundation 0x000000010508a6e3 __CFRunLoopRun + 867 32 CoreFoundation 0x000000010508a0f8 CFRunLoopRunSpecific + 488 33 GraphicsServices 0x000000010726dad2 GSEventRunModal + 161 34 UIKit 0x0000000103aa4f09 UIApplicationMain + 171 35 Dhikr 0x0000000101f26282 principal + 114 36 libdyld.dylib 0x00000001064c392d start + 1) libc ++ abi.dylib: terminaison avec une exception non capturée de type NSException

Le code que j'ai utilisé est:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

let foodList:[String] = ["Bread", "Meat", "Pizza", "Other"]
let drinkList:[String] = ["Water", "Soda", "Juice", "Other"]

@IBOutlet weak var mySegmentedControl: UISegmentedControl!
@IBOutlet weak var myTableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    var returnValue = 0

    switch(mySegmentedControl.selectedSegmentIndex) {
    case 0:
        returnValue = foodList.count
        break
    case 1:
        returnValue = drinkList.count
        break
    default:
        break
    }

    return returnValue
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let myCell = tableView.dequeueReusableCellWithIdentifier("myCells", forIndexPath: indexPath)

    switch(mySegmentedControl.selectedSegmentIndex) {
    case 0:
        myCell.textLabel!.text = foodList[indexPath.row]
        break
    case 1:
        myCell.textLabel!.text = drinkList[indexPath.row]
        break
    default:
        break
    }

    return myCell
}

@IBAction func segmentedControlActionChanged(sender: AnyObject) {
    myTableView.reloadData()  
}

Voici main.Storyboard

enter image description here

J'ai vérifié le code plusieurs fois, mais cela ne fonctionnait pas. Tout d'abord, je devais utiliser uniquement Table View, en regardant ce tutoriel ( https://www.youtube.com/watch?v=ABVLSF3Vqdg ) Je pensais que cela fonctionnerait d'utiliser Segmented Control comme dans le tutoriel. Mais ça ne marche toujours pas. Même code, même erreur. Est-ce que quelqu'un peut m'aider ?

42
Emm

Votre scénarimage est configuré pour s’attendre à un point de vente appelé tableView mais le nom du point de vente réel est myTableView.

Si vous supprimez la connexion dans le storyboard et que vous vous reconnectez au bon nom de variable, le problème devrait être résolu.

92
Phillip Mills

Une chance que vous ayez changé le nom de votre vue table de "tableView" à "myTableView" à un moment donné?

7
Paul Van Wieren