Подтвердить что ты не робот

Необлученное исключение: этот класс не является ключевым значением, совместимым с кодировкой

Я следую учебник под названием "Учебник Swift для iOS: NSFileManager Persisting Data" , и я столкнулся с ошибкой или после отметки 29 минут. Когда я пытаюсь запустить его на симуляторе iOS, я получаю сообщение об ошибке:

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

Очевидно, основываясь на ошибке, я думаю, что проблема - это мой theLoadMethod. Вот весь код, который я написал как часть этого проекта в ViewController:

let theDocumentsFolder = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
let theFileName     = "/theUserFile.txt"
let thePath         = theDocumentsFolder.stringByAppendingString(theFileName)


class ViewController: UIViewController {

@IBOutlet weak var nameTextField: UITextField!
@IBOutlet weak var lastNameTextField: UITextField!
@IBOutlet weak var ageTextField: UITextField!

@IBOutlet weak var theLabel: UILabel!

// The save method
@IBAction func theSaveMethod(sender: AnyObject) {
    var name        = nameTextField.text
    var lastName    = lastNameTextField.text
    var age         = ageTextField.text

    var theString   =   "The user information is: \(name), \(lastName), \(age)"

    let theFileManager = NSFileManager.defaultManager()

    if !theFileManager.fileExistsAtPath(thePath) {

        var writeError:NSError?
        let fileToBeWritten = theString.writeToFile(thePath, atomically: true, encoding: NSUTF8StringEncoding, error: &writeError)

        if writeError == nil {
            println("No errors. Added: \(theString)")
        } else {
            println("Encountered an error. Error is: \(writeError)")
        }

    } else {
        println("File already exists")
    }

    nameTextField.resignFirstResponder()
    lastNameTextField.resignFirstResponder()
    ageTextField.resignFirstResponder()
}

@IBAction func theLoadMethod(sender: AnyObject) {
    let infoFromFile:String = String.stringWithContentsOfFile(thePath, encoding: NSUTF8StringEncoding, error: nil)!

    theLabel.text = infoFromFile
}

Есть ли что-то, что я делаю неправильно? Насколько мне известно, все мои iOS на элементах экрана правильно названы и связаны.

4b9b3361

Ответ 1

Обычно это вызвано ссылкой из вашего раскадровки на несуществующее свойство. Дважды проверьте все ссылки с объектов в вашем раскадровке. Также, если вы изменили имя или правописание свойства или метода, оно все равно может иметь ссылку на старый.

Ответ 2

Для тех, кто сталкивается с одной и той же проблемой, и уже убедился, что IBOutlets в порядке (по крайней мере, отлично выглядит в Interface Builder): убедитесь, что у вас есть модуль (см. прикрепленное изображение), для вашего контроллера контроллера установлен "Текущий - $(PROJECT_NAME)". enter image description here

Ответ 3

У меня была аналогичная проблема. Я изменил поля, требуемые пользователем, и переименовал пару полей.

Я сделал все необходимые изменения в синтаксическом анализе (сброшенные и добавленные столбцы). Бэкэнд не был проблемой.

Исходный код построителя интерфейса по-прежнему содержит старые атрибуты.

Чтобы решить правый щелчок на main.storyboard → Открыть как → Исходный код.... искать поля, которые вы удалили или переименовали... удалить или изменить их... это зависит от сделанных изменений.

В вашем случае вы переименовали методLoadMethod из чего-то еще?

надеюсь, что это поможет кому-то там.

Ура!

Ответ 4

Просто перейдите в свой код Main.storyboard, щелкнув правой кнопкой мыши и выбрав вкладку исходного кода, затем удалите предыдущую запись, которая хранится (приложение сохраняет предыдущие записи, просто удаляет это).

Ответ 5

Я также столкнулся с аналогичной ошибкой. Я решил проблему, изменив значение "Построение местоположения" на "Пользовательский" в настройках XCode после его обновления. Просто установите для этого поля значение "Относительно рабочей области" и что оно.