使用描述符排序数组会抛出valueForUndefinedKey

时间:2011-10-03 19:18:50

标签: cocoa key-value-coding nssortdescriptor

我正在尝试对YOEvento对象的NSMutableArray进行排序。

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...

数组在app delegate中声明为在此处恢复:

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 个答案:

答案 0 :(得分:0)

您正尝试按键@"diaDeInicio"对数组进行排序,但正如消息告诉您的那样:

-[<NSCFString 0x4b564b0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key diaDeInicio.

字符串没有那个键。您有一个字符串数组,因此您无法按该键排序。

使用YOEvento对象而不是字符串填充数组,然后您就可以通过该键对数组进行排序。