自定义类NSObject不符合键值编码
可能重复:
为什么我的对象不符合关键值编码标准?
我有一本词典,我想将键/值添加到自定义类中,但是我总是得到错误,该类不符合KVC,但Apple文档声明它应该是。
我的代码:
ContactObject.h:
@interface ContactObject : NSObject
+ (ContactObject *)testAdding;
@end
ContactObject.m:
@implementation ContactObject
- (id)init {
self = [super init];
if (self) {
// customize
}
return self;
}
+ (ContactObject *)testAdding
{
// create object
ContactObject *theReturnObject = [[ContactObject alloc] init];
[theReturnObject setValue:@"Berlin" forKey:@"city"];
[theReturnObject setValue:@"Germany" forKey:@"state"];
return theReturnObject;
}
@end
我想我错过了很愚蠢的东西:)
请任何帮助表示赞赏...
问候,matthias
实际上要符合KVC:
如何制作符合KVC标准的属性取决于该属性是属性,一对一关系还是多对多关系。 对于属性和一对一关系,类必须按照给定的优先顺序(key指属性键)至少实现以下一项:
key
的声明属性。 setKey:
(如果该属性是Boolean
属性,则getter访问器方法的格式为isKey
。) key
或_key
的实例变量。 我没有看到这三个实施。 您至少需要通过KVC设置的属性,默认的NSObject实现能够通过setValue:forKey:
设置属性setValue:forKey:
但是您必须声明它们。
您需要声明将使用的每个属性:
@interface ContactObject : NSObject
@property (nonatomic,copy, readwrite) NSString* city;
@property (nonatomic, copy, readwrite) NSString* state;
+ (ContactObject *)testAdding;
@end
或者使用一个NSMutableDictionary对象。
例如:
NSMutableDictionary* dict= [NSMutableDictionary new];
[dict setObject: @"Berlin" forKey: @"city"];
[dict setObject: @"Germany" forKey: @"state"];
你需要实际声明/实现属性。 键值编码并不意味着每个NSObject都自动成为键/值字典。
在这种情况下,您需要声明:
@property (nonatomic, readwrite, copy) NSString* city;
@property (nonatomic, readwrite, copy) NSString* state;
在你的@interface
声明中。