2012-11-08 15 views
5

元のメソッドをswizzledメソッドから呼び出す方法はありますか?元のメソッドをswizzledメソッドから呼び出す方法は?

元のメソッドがコードに置き換えます

[[UIWindow class] jr_swizzleMethod:@selector(originalMethod) withMethod:@selector(swizzledMethod) error:nil]; 

swizzledMethodに次のコードでは、再帰を作ります!

[self originalMethod]; 

この問題を解決するにはどうすればよいですか?

私はスウィズリングのために次のライブラリを使用します。

// JRSwizzle.h semver:1.0 
// Copyright (c) 2007-2011 Jonathan 'Wolf' Rentzsch: http://rentzsch.com 
// Some rights reserved: http://opensource.org/licenses/MIT 
// https://github.com/rentzsch/jrswizzle 

#import <Foundation/Foundation.h> 

@interface NSObject (JRSwizzle) 

+ (BOOL)jr_swizzleMethod:(SEL)origSel_ withMethod:(SEL)altSel_ error:(NSError**)error_; 
+ (BOOL)jr_swizzleClassMethod:(SEL)origSel_ withClassMethod:(SEL)altSel_ error:(NSError**)error_; 

@end 
+0

リンクされた質問役に立てば幸い:http://stackoverflow.com/questions/11504133/swizzling-and-super – Dmitry

答えて

14

答えは非常に興味深いです:

[self swizzledMethod]; // will call originalMethod 
0

は、独自のメソッドを呼び出す...あなたはポインタではなく、名前をswizzeled。例:

originalFunc = $ 123 myFuncという= $ 321

スウィズル=>

originalFunc = $ 321 myFuncという= $ 123

がそう元$ 123呼び出すために、我々は今、myFuncという

+0

@Altaveronが正しいとは、私はちょうどそれを再度説明しました私も最初にそれに落ちたので...数回:D –

3

を呼び出す私が行っていましたiOS 5のスウィズル方法を作成することによって

と私はここでそれの説明を置く。

Method Swizzling in iOS 5?

基本的に、元のメソッドのすべての呼び出しは、あなたに起こっています。したがって、メソッドへの呼び出しはすべて元のメソッドに戻す必要があります。 (スウィズルが正しく設定されている場合)

関連する問題