我正在尝试实现一个NSMutableDictionary的子类,它返回零,而不是在字典中没有密钥时抛出一个NSUndefinedKeyException。
然而,当我试图将对象添加到我的字典中时,我会得到
[NSMutableDictionary setObject:forKey:]: method only defined for abstract classNilDictionary.h
@interface NilDictionary : NSMutableDictionary {
}
@endNilDctionary.m
@implementation NilDictionary
- (id)valueForUndefinedKey:(NSString *)key {
return nil;
}
@end我真的需要在子类中再次实现来自NSMutableDictionary的所有方法吗?还是应该有其他的子类呢?
Clarification:我最初的问题归结到我无法正确地阅读文档。
如果需要子类NSMutableDictionary,请检查正确的答案。如果您想要在键不存在时返回零的字典,NSMutableDictionary已经这样做了。
发布于 2011-01-25 04:17:30
NSMutableDictionary类引用说:
在子类中,必须覆盖它的两个基本方法:
1. setObject:forKey:
2. removeObjectForKey:
还必须重写NSDictionary类的基本方法。
NSDictionary类引用说:
如果您确实需要对NSDictionary进行子类分类,则需要考虑由Class cluster-there表示的几个基本方法,这些方法在概念上是基于这些方法的:
1.计数
2. objectForKey:
3. keyEnumerator
initWithObjects:forKeys:count: 4.
在子类中,必须重写所有这些方法。
NSDictionary’s其他方法通过调用这些原语中的一个或多个来操作。非原始方法提供了一次访问多个条目的方便方法。
似乎您需要覆盖所有这六种方法,以使您的NSMutableDictionary子类完美工作。
发布于 2011-01-25 04:13:48
这是你的问题。NSDictionary (及其可变的对应项)是类集群的一部分(在“类集群”标题下阅读更多关于它们的这里 ),并且不应该被子类化,因为它会导致诸如您所提到的问题(阅读NSDictionary类引用中的子类注释)。无论您需要做什么,您都将有一种方法来扩展您想要使用的类,以便完成您想要做的事情。例如,上面的代码可以很容易地放在一个类别中(阅读更多关于类别这里的内容)。
发布于 2011-01-25 04:53:43
您确定在为键(而不是值)传入"nil“时没有得到异常吗?
https://stackoverflow.com/questions/4789852
复制相似问题