Приложение вылетает из-за того, что - "Класс не является ключевым значением, совместимым с кодом для ключа"

Мое приложение падает каждый раз, когда я иду на VieController3, и я не знаю, почему и как решить проблему.

http://img3.fotos-hochladen.net/uploads/bildschirmfoto6cji4t9fp1.png

Завершение приложения из-за неотображенного исключения "NSUnknownKeyException", причина: "[setValue: forUndefinedKey:]: этот класс не является ключевым значением, совместимым с кодировкой для ключевого tableView".

import UIKit
import CoreData

class ViewController3: UIViewController, UITableViewDataSource {

var people = [NSManagedObject]()

@IBOutlet weak var tableView: UITableView!


func tableView(tableView: UITableView,
    numberOfRowsInSection section: Int) -> Int {
        return people.count
}

func tableView(tableView: UITableView,
    cellForRowAtIndexPath
    indexPath: NSIndexPath) -> UITableViewCell {

        let cell =
        tableView.dequeueReusableCellWithIdentifier("Cell")
            as UITableViewCell

        let person = people[indexPath.row]
        cell.textLabel!.text = person.valueForKey("name") as String?

        return cell
}

@IBAction func addExercise(sender: AnyObject) {
    var alert = UIAlertController(title: "New exercise",
        message: "Add a new exercise",
        preferredStyle: .Alert)

    let saveAction = UIAlertAction(title: "Save",
        style: .Default) { (action: UIAlertAction!) -> Void in

            let textField = alert.textFields![0] as UITextField
            self.saveName(textField.text)
            self.tableView.reloadData()
    }

    let cancelAction = UIAlertAction(title: "Cancel",
        style: .Default) { (action: UIAlertAction!) -> Void in
    }

    alert.addTextFieldWithConfigurationHandler {
        (textField: UITextField!) -> Void in
    }

    alert.addAction(saveAction)
    alert.addAction(cancelAction)

    presentViewController(alert,
        animated: true,
        completion: nil)
}

func saveName(name: String) {
    //1
    let appDelegate =
    UIApplication.sharedApplication().delegate as AppDelegate

    let managedContext = appDelegate.managedObjectContext!

    //2
    let entity =  NSEntityDescription.entityForName("Person",
        inManagedObjectContext:
        managedContext)

    let person = NSManagedObject(entity: entity!,
        insertIntoManagedObjectContext:managedContext)

    //3
    person.setValue(name, forKey: "name")

    //4
    var error: NSError?
    if !managedContext.save(&error) {
        println("Could not save \(error), \(error?.userInfo)")
    }
    //5
    people.append(person)
}

override func viewDidLoad() {
    super.viewDidLoad()
    title = "\"Edit your Exercises\""
    tableView.registerClass(UITableViewCell.self,
        forCellReuseIdentifier: "Cell")
}

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

    //1
    let appDelegate =
    UIApplication.sharedApplication().delegate as AppDelegate

    let managedContext = appDelegate.managedObjectContext!

    //2
    let fetchRequest = NSFetchRequest(entityName:"Person")

    //3
    var error: NSError?

    let fetchedResults =
    managedContext.executeFetchRequest(fetchRequest,
        error: &error) as [NSManagedObject]?

    if let results = fetchedResults {
        people = results
    } else {
        println("Could not fetch \(error), \(error!.userInfo)")
    }
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

-2
19 февр. '15 в 19:28
источник поделиться
1 ответ

Последний скриншот показывает еще одну ошибку до этого, что, вероятно, вызывает ошибку ниже.

Unknown class ViewController3 in InterfaceBuilder

Для меня это предполагает, что вы попытались установить класс в ViewController, но класс был введен неправильно. Вы создали класс ViewController3 который наследует UIViewController?

Из-за этого ViewController по умолчанию использует UIViewController умолчанию, а UIViewController не имеет свойства tableView поэтому он сбой.

Надеюсь, это поможет.

0
20 февр. '15 в 9:57
источник

Посмотрите другие вопросы по меткам или Задайте вопрос