Что является причиной ошибки нераспознанного селектора keyNommand длины NSNull
У меня есть сцена класс / раскадровка в проекте, который до прошлой ночи работал хорошо в течение прошлых 4 недель, я работал над этим.
Мне удалось закомментировать практически все, и я по-прежнему получаю сбой при нажатии на UITextField и ввод числа. Он падает только при вводе значения, иначе он не падает.
Вот класс, которым я сейчас занимаюсь:
import Foundation
import UIKit
import HealthKit
import CoreData
class WorkoutViewController: UITableViewController {
//Properties
@IBOutlet var numberOfLapsTextField: UITextField?
@IBOutlet var metersPerLapTextField: UITextField?
@IBOutlet var workoutDurationTextField: UITextField?
@IBOutlet var paceTextField: UITextField?
var healthStore:HKHealthStore?
override func viewDidLoad() {
super.viewDidLoad()
}
Первоначально он имел IBOutlets как! вместо? И у него есть свойство стека CoreData, некоторые размытые фоновые эффекты для фона табличного представления, извлекает вес пользователя из хранилища здоровья при помощи viewDidLoad, вспомогательный метод предиката для выборок из хранилища здоровья и кнопка отмены и завершения. Кнопка "Готово" собирала данные из текстовых полей, производила некоторые вычисления и сохраняла данные в хранилище медицинских данных и в coredata. Но ВСЕ это закомментировано, оставляя только то, что видно выше.
Мне удалось однажды получить странную трассировку стека в консоли (кажется, больше не могу ее получить), которая гласила:
[UIPhysicalKeyboardEvent _matchesKeyCommand:]
и некоторым другим нравится это как раз перед этим.
Я в тупике, есть идеи? Точки прерывания исключения - это одно, но оно просто приводит меня к строке объявления класса AppDelegate, где принимается UIResponder. Я выучил и перестроил. Я не знаю, что еще искать.
Я думаю, это испорченный файл раскадровки, потому что я добавил и удалил сцены с текстовыми полями, и все они ведут себя одинаково. Вот мой файл storyboard.xml:
3 ответа
Хорошо, я удалил контроллеры навигации и контроллер панели вкладок и снова добавил их, и проблема исчезла! Больше нет сбоев при вводе данных. Это была явно испорченная сцена, но странно то, что внезапно все сцены с полями uitext повредились одинаково.
Я хотел бы добавить, что опытные пользователи SO должны действительно потратить время, чтобы поговорить с пользователями, публикующими сообщения, прежде чем они проголосуют против. В противном случае пользователям следует разрешить переформулировать вопрос обратно, потому что действительно несправедливо, что некоторые люди спешат с выводами и начинают голосовать за вопрос, который на самом деле является действительной проблемой.
У меня был сбой с той же загадкой NSNull length
сообщение. При тестировании в симуляторе он иногда появлялся только на одном экране, и методом проб и ошибок я обнаружил, что это происходит только при нажатии клавиши cmd.
Просматривая в своем источнике раскадровки, я нашел следующее:
<keyCommands>
<keyCommand/>
</keyCommands>
Что, я думаю, позволяет вам определять сочетания клавиш для всех, кто использует клавиатуру Bluetooth. Однако - это пустое определение, поэтому кажется, что нажатие cmd вызвало сбой всего, что выполняется, потому что у меня не определены допустимые ярлыки.
Я абсолютно не знаю, как это произошло, но если вы используете графический интерфейс Interface Builder, чтобы посмотреть на раскадровку, перейдите к контроллеру представления, который дает вам проблему, и нажмите на корневой контроллер представления. Под инспектором Атрибутов есть раздел Команды ключей. Я считаю, что я должен был случайно нажать кнопку + здесь в какой-то момент. Вы можете выбрать первый "пункт" и нажать - чтобы избавиться от него, и проблема должна исчезнуть.
Или удалите keyCommands
раздел из источника раскадровки напрямую.
Я вижу, что этот вопрос уже помечен как ответный, но я включаю его в том случае, если дополнительная информация в верхней части исходного ответа (и комментарий) будет полезна для кого-то еще.
Нажмите на контроллере представления и в инспекторе атрибутов в разделе "Ключевые команды" удалите запись "Введите действие ниже"