Ios 无法在运行时交换NSDictionary的objectForKey方法实现?

Ios 无法在运行时交换NSDictionary的objectForKey方法实现?,ios,objective-c,runtime,nsdictionary,Ios,Objective C,Runtime,Nsdictionary,我尝试在运行时使用NSDictionary的objectForKey:实现exchange,但没有任何变化 #import "NSDictionary+Utils.h" #import <objc/runtime.h> @implementation NSDictionary (Utils) + (void)load { method_exchangeImplementations(class_getInstanceMethod(self, @selector(objec

我尝试在运行时使用NSDictionary的objectForKey:实现exchange,但没有任何变化

#import "NSDictionary+Utils.h"
#import <objc/runtime.h>

@implementation NSDictionary (Utils)

+ (void)load
{
    method_exchangeImplementations(class_getInstanceMethod(self, @selector(objectForKey:)),
                                   class_getInstanceMethod(self, @selector(_objectForKey:)));
}

- (id)_objectForKey:(id)aKey
{
    NSLog(@"ok");
    id obj = [self _objectForKey:aKey];
    if ([obj isEqual:[NSNull null]]) {
        return nil;
    }
    return obj;
}

@end
#导入“NSDictionary+Utils.h”
#进口
@实现NSDictionary(Utils)
+(空)荷载
{
方法交换实现(类getInstanceMethod(self,@selector(objectForKey:)),
class_getInstanceMethod(self,@selector(_objectForKey:));
}
-(id)(id)aKey(id)
{
NSLog(@“正常”);
id obj=[self\u objectForKey:aKey];
if([obj isEqual:[NSNull]]{
返回零;
}
返回obj;
}
@结束
谁能告诉我为什么


感谢您阅读我的蹩脚英语。

NSDictionary是一个类群集。您从不处理NSDictionary的直接实例;相反,字典总是某些NSDictionary子类的实例。因此,您正在交换一个无论如何都不会调用的方法。

对于您试图实现的目标,我建议在NSDictionary上使用一个类别,提供一个自定义的
saveObjectAtIndex:
方法,并在代码中使用它


另一个选项是NSNull上的一个类别,因此它的行为类似于nil,如下所示:

因为您正在做一些不应该做的事情。您应该做的是不要破坏整个系统使用的类的功能。没有正当的理由需要在行为上进行上述更改(也有很多理由不进行这种更改)。即使有这样一个类别,仍然有一个重要的区别:NSNull为true,而nil为false。@robert:我只想避免从NSDictionary返回[NSNull null null]值。我不想更改NSNull的任何内容,它会导致其他问题。谢谢你的帮助@zendo-什么问题?谢谢!也许我会使用替换方法,比如objForKey:而不是。。。你还有别的东西吗?