子类化NSMapTable

时间:2013-05-23 07:22:02

标签: ios objective-c map subclass

由于iOS中没有Ordered NSMapTable的集合(长篇故事,为什么我首先需要一个:))我尝试将其子类化并自己实现。

不幸的是,我面临一些奇怪的问题:

我无法添加属性甚至覆盖init方法。

我总是得到一个提示:

  

未捕获的异常:-[NSConcreteMapTable setKeyIndexArray:]:无法识别的选择器发送到实例

这是我的代码:

OrderedMapTable.h

@interface OrderedMapTable : NSMapTable

-(id) objectAtIndex:(NSUInteger)index;

-(id) keyAtIndex:(NSUInteger)index;

@end

OrderedMapTable.m

@interface OrderedMapTable()

@property (nonatomic, strong) NSMutableArray* keyIndexArray;

@end


@implementation OrderedMapTable


+(id)strongToStrongObjectsMapTable
{
    OrderedMapTable* orderedMapTable = [super strongToStrongObjectsMapTable];
    orderedMapTable.keyIndexArray = [[NSMutableArray alloc] init];
    return orderedMapTable;
}

...
@end

1 个答案:

答案 0 :(得分:0)

这就是为什么你不应该继承Cocoa集合类的原因。 (顺便说一下,异常消息是一个非常清晰,有意义的英语句子。阅读并理解它。

OrderedMapTable* orderedMapTable = [super strongToStrongObjectsMapTable];

调用super - 创建NSMapTable的实例,而不是您自己的子类的实例,当然,它没有keyIndexArray属性。< / p>

一种可能的解决方案:分配self并在创建的实例上调用指定的初始化程序。

OrderedMapTable *map = [[self alloc] initWithKeyOptions: NSMapTableStrongMemory valueOptions: NSMapTableStrongMemory capacity:0];

如上所述,忽略上述内容,它不起作用,initWithKeyOptions:valueOptions:capacity:方法始终创建私有子类的实例。你无能为力。暂时忘记子类化。

相关问题