Сортировка NSArray с использованием дескрипторов - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть два массива, я хочу напечатать значения по именам и псевдонимам.Они являются значениями NSString.

Я новичок в obj-c.Буду рад любой помощи.

И я добавлю все, что вам нужно, чтобы понять причину проблемы, спасибо!

NSArray <VBHuman*> * arrayOfHumans = [NSArray arrayWithObjects:
                          human, cycler, runner, swimmer, boxer,
                          nil];

NSArray <VBAnimal*> * arrayOfAnimals = [NSArray arrayWithObjects:
                           animal, dog, cat, hamster,
                           nil];

NSArray* newArray = @[];
newArray = [newArray arrayByAddingObjectsFromArray:arrayOfHumans];
newArray = [newArray arrayByAddingObjectsFromArray:arrayOfAnimals];


[newArray sortedArrayUsingDescriptors:
 @[
   [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES],
   [NSSortDescriptor sortDescriptorWithKey:@"alias" ascending:YES]
   ]];

В результате это не работает, имеет следующий тип:

[<VBAnimal 0x6000002520f0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key name.

1 Ответ

0 голосов
/ 05 февраля 2019

Сообщение об ошибке говорит вам, что не так:

[<VBAnimal 0x6000002520f0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key name.

Когда вы используете -sortedArrayUsingDescriptors:, NSArray использует ключи, которые вы даете, чтобы получитьзначения из объектов, которые он сравнивает, чтобы решить, как упорядочить объекты.Если он не может определить порядок по первому дескриптору (поскольку значения, возвращаемые объектами одинаковы), он переходит к следующему дескриптору до тех пор, пока не будет определен порядок или не закончится дескриптор.

Итак, когда вы сортируете свой массив, NSArray начинается с первого ключа, то есть @"name".Если ваш VBAnimal класс не соответствует KVC для ключа @"name", то вы получите ошибку выше.Существует как минимум три способа реализации кодирования значения ключа для данного ключа:

  • предоставить метод с именем, совпадающим с ключом, и заставить его вернуть значение
  • добавить свойствос именем, совпадающим с ключом
  • реализовать valueForKey:, таким образом, чтобы он возвращал значение для ключа

Вам необходимо сделать одно из этих двух значений для вашего класса VBAnimal.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...