我想创建一个NSMutableDictionary,它键入特定对象并映射到NSNumber。该对象来自第三方库,并未实现copyWithZone方法。编译器可以理解地抱怨使用代码将无法识别的选择器(copyWithZone)发送到对象:
[dictionary setObject:[NSNumber numberWithInt:index] forKey:someObject];
由于我不想为第三方库对象创建自己的copyWithZone方法,我不需要知道如何复制,因此我没有创建实现该方法的类别。
我的hack是将内存地址存储在NSNumber中,方法是将其转换为long long:
[dictionary setObject:[NSNumber numberWithInt:index] forKey:[NSNumber numberWithLongLong:(long long)someObject]];
要检索值:
NSNumber *indexNumber = [dictionary objectForKey:[NSNumber numberWithLongLong:(long long)someObject]];
这对我来说似乎很骇人听闻。什么是更简洁的方法来处理对象到int的映射?
答案 0 :(得分:0)
只需使用相关对象......
请参阅How do I use objc_setAssociatedObject/objc_getAssociatedObject inside an object?
那个q / a有一个很好的例子。
(关联对象允许您将任意对象集与另一个对象相关联,使用键来查找任何单个对象。)