私は、アプリケーションのライフサイクルイベントを取得する必要があるフレームワークに取り組んでいます。私は試しています通知センターフレームワークの下で失敗します。だから、私はメソッドSwizzlingを実行することを決めました。問題は、下のコードがエミュレータに期待どおりに正常に動作しています。私はデバイスを実行していたとき、それは失敗します。AppDelegateメソッドをスウィズルする
良いことは、メソッドが呼び出され、拡張され、元のメソッドを呼び出すときに、このメッセージここ
Thread 1: EXC_BAD_ACCESS (code=1, address=0x20)
で失敗しますが
IMP originalImplementation;
+ (instancetype)initWith:(NSString *)bundleIdentifier{
Demo *instance = [[Demo alloc] init];
[instance swizzlingLifeCycleMethods];
return instance;
}
- (void)swizzlingLifeCycleMethods{
//Prepare the injected class name to be injecting
Class originalClass = NSClassFromString(@"AppDelegate");
//Prepare the methods to swizzling
SEL originalWillResignAction = @selector(applicationWillResignActive:);
SEL extendedWillResignActive = NSSelectorFromString(@"extendedApplicationWillResignActive");
//Get original method and method encoding
originalResignMethod = class_getInstanceMethod(originalClass, originalWillResignAction);
originalImplementation = method_getImplementation(originalResignMethod);
const char *originalResignMethodEncoding = method_getTypeEncoding(originalResignMethod);
//Add swizzling method into targetted class
class_addMethod(originalClass, extendedWillResignActive, (IMP)extendedApplicationWillResignActive, originalResignMethodEncoding);
//Swizzling the methods
Method extendedResignMethod = class_getInstanceMethod(originalClass, extendedWillResignActive);
method_exchangeImplementations(originalResignMethod, extendedResignMethod);
}
//Called at the time of user enters into background
void extendedApplicationWillResignActive(id self, SEL _cmd, va_list args1)
{
//Implement our logic here
//Call the original function after our stuff done
((void(*)(id, SEL, ...))originalImplementation)(self, _cmd, args1);
}
私はユニバーサルフレームワークのビルドを使用している私のコードです私のサンプルプロジェクトでこのフレームワークを使用してください。親切にも、これで何が間違っているか教えてください。
おかげCRD、私は私の新しいメソッドの実装を変更したし、それが動作します。 - (void)quixxiApplicationWillResignActive:(UIApplication *)アプリケーション { (void(*)(id、SEL、UIApplication *))originalImplementation)(self、_cmd、application); } – Jegan