2013-09-25 3 views
1

В моем проекте есть библиотека, которая добавляет слушателей аудио-свойств. Мне действительно нужно уметь блокировать это от этого, но у меня нет исходного кода.Как подшучивать AudioSessionAddPropertyListener

Я уже делал swizzle для метода addObserver в NSNotificationCenter. Не могли бы вы помочь мне сделать то же самое для AudioSessionAddPropertyListener? Если метод, пытающийся быть добавленным в вызове, не совпадает с моим «белым списком», я хочу его заблокировать. В противном случае я вызову исходный метод.

Я не знаю, для какого класса я должен перегрузить функцию загрузки. Я просматриваю Audio.h. Я добавляю код псевдо/реального/плохого кода, чтобы вы могли видеть, что я пытаюсь сделать.

#import <AudioToolbox/AudioToolbox.h> 
@interface AuidoClassUmm (SOMETHING) 
@end 

+ (void) load 
{ 
    Method original, swizzled; 
    original = class_getInstanceMethod(self, @selector(AudioSessionAddPropertyListener:selector:name:object:)); 
    swizzled = class_getInstanceMethod(self, @selector(swizzled_AudioSessionAddPropertyListener:selector:name:object:)); 

    method_exchangeImplementations(original, swizzled); 
} 

-(void) swizzled_AudioSessionAddPropertyListener:selector:name:object: 
{ 
    if(//funciton object I don't like) 
    { 
     return; 
    } 
    else 
    { 
     // Calls the original addObserver function 
     [self swizzled_AudioSessionAddPropertyListener::notificationObserver selector:notificationSelector name:notificationName object:notificationSender]; 
    } 
} 

ответ

3

AudioSessionAddPropertyListener() является функцией С, не метод Objective-C. Вы не можете его лечить.

(Даже если вы могли бы Swizzle его, что почти наверняка будет плохой идеей.)

+0

Aww штопка, ну это не плохая идея, но я вижу, что я не могу это сделать. – Gandalf458