2015-11-17 4 views
0

Мне не удалось выполнить NSMutableArray addObject. код следующим образом:swizzle NSMutableArray addObject: failed

Method ori_Mehtod = class_getInstanceMethod([self class], @selector(addObject:)); 
Method swi_Method = class_getInstanceMethod([self class], @selector(swi_addObject:)); 
method_exchangeImplementations(ori_Mehtod, swi_Method); 

Но я нашел полезный способ, следующим образом:

Method orig = class_getInstanceMethod(NSClassFromString(@"__NSArrayM"), NSSelectorFromString(@"addObject:")); 
Method override = class_getInstanceMethod(NSClassFromString(@"__NSArrayM"), @selector(addObject_override:)); 
method_exchangeImplementations(orig, override); 

Я предполагаю, что есть что-то неправильно в [классе себя]. Но я не знаю, где проблема.

+0

Что является результатом '[само класс]'? –

+0

Думаю, следующий вопрос: чего вы пытаетесь достичь? Может, есть другой способ? – nielsbot

ответ

2

NSMutableArray - класс кластера. Экземпляры всегда имеют скрытый тип класса (например, найденный вами __NSArrayM), поэтому сам класс NSMutableArray мало чем хорош.

0

Я думаю, что вы ищете способ Swizzle кластера, взгляните на NSObjectSafe, это крошечное открытым исходным кодом, который крючок наиболее часто используемых функций контейнера Foundation, такие как [NSMutableArray AddObject:]

0
+0

Приветствия. Пожалуйста, ознакомьтесь с [Пройдите в тур] (http://stackoverflow.com/tour) и [ваш ответ находится в другом замке: когда ответ не является ответом] (http://meta.stackexchange.com/questions/225370) – Drew

Смежные вопросы