Почему я получаю сообщение об ошибке: «Класс не соответствует кодировке ключ-значение для мажора ключа», хотя мажор является свойством класса? - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь использовать NSArrays и NSPredicates для фильтрации определенных ячеек UITableView. У меня есть класс TableViewController с именем FilterTable, который состоит из FilterCell, который является подклассом UITableViewCell. Данные в ячейке фильтра поступают из UserProfile, у которого есть свойство major. Когда пользователь нажимает кнопку, я хочу, чтобы в таблице отображались только те ячейки, которые соответствуют пользователям, для которых компьютерная наука является основной. Я создал NSPredicate для фильтрации массива UserProfile, который я использую для заполнения своей таблицы, но при этом я получаю сообщение об ошибке

*** Завершение работы приложения из-за необработанного исключения «NSUnknownKeyException», причина: «[valueForUndefinedKey:]: этот класс не соответствует кодовому значению ключа для мажорной тональности.»

Однако, как я уже сказал, major является собственностью UserProfile.

Другие исправления проблем с соответствием значения ключа предполагают, что розетки неправильно подключены в конструкторе интерфейсов. Тем не менее, UserProfile не отображается непосредственно в FilterTable и, следовательно, не подключен через IB, и я не хочу, чтобы это было. Вместо этого FilterTable имеет массив UserProfiles, которые он использует для заполнения FilterCells. Я также попытался связать FilterCell с FilterTable, и затем я смог получить доступ к метке, соответствующей мажору, но это дало мне ошибку, из-за которой нельзя повторить повтор содержимого.

// FROM FilterTable:
...
let predicate = NSPredicate(format: "major = 'Computer Science'")
filteredProfiles = (userProfilesArray as NSArray).filtered(using: predicate) as NSArray
...


// FROM UserProfile
class UserProfileViewController: UIViewController {
var major: String!
...

1 Ответ

0 голосов
/ 10 мая 2019

Вы еще не указали элемент, обладающий основным свойством, попробуйте это ...

userProfilesArray.filter{$0.major == "Computer Science"}

при условии, что ваш массив является массивом объектов профиля

...