应用程序崩溃与setValuesForKeysWithDictionary

时间:2012-08-17 21:20:49

标签: iphone objective-c ios cocoa-touch key-value-coding

我正在使用setValuesForKeysWithDictionary来填充我的模型对象。模型对象定义为

@interface Media : NSObject
{
    NSString *userId;
    NSString *mediaType;
}

@property(nonatomic,copy) NSString *userId;
@property(nonatomic,copy) NSString *mediaType;

属性合成看起来像,

@implementation Media
@synthesize userId;
@synthesize mediaType;

我按如下方式初始化类,

NSMutableDictionary *dic = [NSMutableDictionary new];
[dic setValue:@"aaa" forKey:@"userId"];
[dic setValue:@"bbb" forKey:@"mediaType"];

Media *obj = [[Media alloc] init];
[obj setValuesForKeysWithDictionary:dic];

这与消息

崩溃
'[<Media 0x8a9f280> valueForUndefinedKey:]: this class is not key value coding-compliant    for the key aaa.'

为什么setValuesForKeysWithDictionary:将我的值视为关键?或者我误解了setValuesForKeysWithDictionary:function的用途?

2 个答案:

答案 0 :(得分:0)

终于找到了答案。它不是关于设置值而是设置检索部分。我使用以下方法从模型中读回值。

-(NSDictionary*) dictionaryRepresentation
{ 
   return [self dictionaryWithValuesForKeys:[NSArray arrayWithObjects:,userId,mediaType,     nil]];
}

正如您所看到的,我使用了普通变量名而不是键。 @“userId”,@“mediaType”。

我最近将xcode更改为不同的字体主题,并且仍然习惯了新的字体颜色集。谢谢你们宝贵的时间。

答案 1 :(得分:0)

在声明变量时添加@objc作为前缀。

class Customer: NSObject
{
    @objc var name: String?
    @objc var email: String?
}

应该可以。