首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子类NSMutableDictionary

子类NSMutableDictionary
EN

Stack Overflow用户
提问于 2011-01-25 04:02:38
回答 3查看 10.1K关注 0票数 12

我正在尝试实现一个NSMutableDictionary的子类,它返回零,而不是在字典中没有密钥时抛出一个NSUndefinedKeyException。

然而,当我试图将对象添加到我的字典中时,我会得到

代码语言:javascript
复制
[NSMutableDictionary setObject:forKey:]: method only defined for abstract class

NilDictionary.h

代码语言:javascript
复制
@interface NilDictionary : NSMutableDictionary {
} 
@end

NilDctionary.m

代码语言:javascript
复制
@implementation NilDictionary
- (id)valueForUndefinedKey:(NSString *)key {
  return nil;
}
@end

我真的需要在子类中再次实现来自NSMutableDictionary的所有方法吗?还是应该有其他的子类呢?

Clarification:我最初的问题归结到我无法正确地阅读文档。

如果需要子类NSMutableDictionary,请检查正确的答案。如果您想要在键不存在时返回零的字典,NSMutableDictionary已经这样做了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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子类完美工作。

票数 26
EN

Stack Overflow用户

发布于 2011-01-25 04:13:48

这是你的问题。NSDictionary (及其可变的对应项)是类集群的一部分(在“类集群”标题下阅读更多关于它们的这里 ),并且不应该被子类化,因为它会导致诸如您所提到的问题(阅读NSDictionary类引用中的子类注释)。无论您需要做什么,您都将有一种方法来扩展您想要使用的类,以便完成您想要做的事情。例如,上面的代码可以很容易地放在一个类别中(阅读更多关于类别这里的内容)。

票数 4
EN

Stack Overflow用户

发布于 2011-01-25 04:53:43

您确定在为键(而不是值)传入"nil“时没有得到异常吗?

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4789852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档