Я разрабатываю приложение, которое должно выполнять некоторые swizzling. Я изучаю метод -(void)m1:(CMAcceleration)a;
с другим, который я предоставляю.Objective-C swizzled method, не получающий аргументы
-(void)newM(id self, SEL _cmd, ...){
va_list args;
va_start(args, _cmd);
//...
NSInteger returnValue=((NSInteger(*)(id,SEL,...))origImp)(self,_cmd,args);
va_end(args);
}
Чтобы Swizzle его я использую:
origImp=method_setImplementation(method, newImp);
Я тогда называть это нормально, как [ClassInstance m1:a];
Дело в том, арг, кажется, заполнен мусором, когда я ожидал структуру, подобную {name=type...}
, как описано в here , Мне нужно передать аргументы исходной реализации после выполнения некоторой операции, например NSLog.
Поиск в Интернете кажется, что это проблема с симулятором, но я не уверен, и у меня нет доступа к устройству, чтобы подтвердить это.
Я делаю что-то неправильно или есть способ исправить это?
Что вам «арг, кажется, заполнен мусором «? Покажите код, который вы использовали для его определения. Что вы имеете в виду, что вы «ожидали такую структуру, как' {name = type ...} '?? Покажите код, как вы ожидали, чтобы использовать аргументы, как вы ожидали, что он будет вести себя, и как он себя ведет. Также покажите пример вызова метода. –
@KenThomases Я его отредактировал, надеюсь, что это поможет –