#cocoa #key-value-coding #nssortdescriptor
#cocoa #кодирование ключа-значения #nssortdescriptor
Вопрос:
Я пытаюсь отсортировать NSMutableArray объектов YOEvento.
YOEvento.h
@interface YOEvento : NSObject
{
NSString *nombre; // stores the <name> tag
NSDate *diaDeInicio; // stores the tag <dia-de-inicio>
NSDate *diaDeFin; // stores the tag <dia-de-fin>
NSString *entradilla; // stores the tag <entradilla>
}
@property (nonatomic, retain) NSString *nombre;
@property (nonatomic, retain) NSDate *diaDeInicio;
@property (nonatomic, retain) NSDate *diaDeFin;
@property (nonatomic, retain) NSString *entradilla;
@end
YOEvento.m
#import "YOEvento.h"
@implementation YOEvento
@synthesize nombre, diaDeInicio, diaDeFin, entradilla;
etc...
Массив объявляется в делегате приложения, как показано здесь:
NSMutableArray *eventosParsed;
@property (nonatomic, retain) NSMutableArray *eventosParsed;
@synthesize eventosParsed;
После заполнения массива я пытаюсь отсортировать его по diaDeInicio:
NSSortDescriptor *descriptorByDate = [[NSSortDescriptor alloc] initWithKey:@"diaDeInicio" ascending:YES];
NSArray *descriptorsArray = [NSArray arrayWithObject:descriptorByDate];
[self.eventosParsed sortedArrayUsingDescriptors:descriptorsArray];
[descriptorByDate release];
Но после попытки выполнить инструкцию [self.eventosParsed sortedArrayUsingDescriptors:descriptorsArray];
я получаю сигнал SIGABRT и следующее сообщение в консоли:
'NSUnknownKeyException', reason: '[<NSCFString 0x4b564b0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key diaDeInicio.'
Я проверил содержимое массива перед инструкцией, и, похоже, он заполнен хорошо сформированными объектами YOEvento, это копия и вставка из информации отладчика о свойстве eventosParsed первого элемента. Значения не отображаются, но каждая переменная экземпляра в объекте YOEvento имеет правильное значение.
eventosParsed __NSArrayM * 0x4e900e0
0 YOEvento * 0x4ea3660
NSObject NSObject {...}
nombre NSCFString * 0x4ea37e0
diaDeInicio __NSDate * 0x4ea7370
diaDeFin __NSDate * 0x4ea6630
entradilla NSCFString * 0x4ea3c50
Ответ №1:
Вы пытаетесь отсортировать свой массив по ключу @"diaDeInicio"
, но, как указано в сообщении:
-[<NSCFString 0x4b564b0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key diaDeInicio.
Строки не имеют этого ключа. У вас есть массив строк, поэтому вы не можете сортировать по этому ключу.
Заполните массив объектами YOEvento вместо строк, и тогда вы сможете отсортировать массив по этому ключу.
Комментарии:
1. Я проверил массив eventosParsed перед инструкцией, и он заполнен хорошо сформированными объектами YOEvento.
2. @DavidCasillas: И все же вы получаете это исключение. В то время, когда вы пытаетесь его отсортировать, в массиве есть по крайней мере одна строка, или вы смотрите на массив, отличный от того, который вы пытаетесь отсортировать.