2013-09-25 37 views
1

我的項目中有一個庫正在添加音頻屬性偵聽器。我真的需要能夠阻止它這樣做,但我沒有源代碼。如何調配AudioSessionAddPropertyListener

我在NSNotificationCenter中爲addObserver方法做了一個調整。你能幫我對AudioSessionAddPropertyListener做同樣的事嗎?如果試圖在通話中添加的方法與我的白名單不匹配,我想阻止它。否則,我會調用原始方法。

我不知道我應該重載哪個類的負載函數。我正在尋找 Audio.h。我添加了一些pseudo/real/badlyNamed代碼,這樣你就可以看到我想要做的事情。

#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()是C函數,而不是Objective-C方法。你不能改變它。

(即使你可以調配來,那幾乎可以肯定是一個壞主意。)

+0

噢織補,以及它不會是一個壞主意,但我知道我不能這樣做。 – Gandalf458