2014-02-08 163 views
0

我已经搜索了对此的答案并找不到一个。Theos实例方法调用

如何在同一个类中调用一个实例方法我正在调用Theos调整? 如果我是用标准的Xcode我会用自己的方法i.e.-

[self method:arg]; 

但在狄奥调整此说找不到方法,即使我钩住方法。

实施例:

%hook classimhooking 

-(void)methodimhooking 
{ 
    [classimhooking methodiwanttocall]; 
    [self methodiwanttocall]; 
    %orig; 
} 

-(void)methodiwanttocall 
{ 
    %orig; 
} 

%end 

methodiwanttocall的是存在的,我可以钩到它,只是不调用它。 我曾尝试添加一个新方法%new并调用,但它没有找到,我已经尝试了相同的延迟,但它没有被发现。 我已经尝试定义我的类的变量并调用它,但它不起作用。

我也可以看到,你可以直接抓住iVar,但这不适用于方法。

任何想法,将不胜感激。

+0

你的问题不是很清楚。建议写这个[self method:arg];在你的控制器的viewdidload方法中。 viewdidload在您的viewcontroller加载时调用。这些%orig是什么? – Pawan

+0

这些是Theos指令,它们调用我正在挂钩的类的原始方法。这个问题只是相对于你而言,因为你写的确实会在标准目标c中工作。 –

+0

我真的很抱歉。我不知道。将尝试尽快回答你。谢谢 – Pawan

回答

1

如果你想调用对象的方法,你只是大呼过瘾,你可以使用performSelector(或performSelector:withObject:如果它有一个参数),这应该是类似的东西:

[self performSelector:@selector(methodiwanttocall)]; 
+0

虽然编译得很好,但该方法不会被调用。 我尝试了一些方法,但没有一个被调用。 自我需要改变,因为自我会引用tweak.xm而不是被钩住的类? –

+0

我认为你可以参考'self'它实际上是传递给函数的第一个参数,因此应该是可用的......我不清楚它为什么不起作用,但我将能够检查那很快就足够了 – MByD

0

对不起挖一个旧线程。我可能对这个问题有一个想法。如果有任何人遇到同样的问题。

问题是,编译器不知道有这样的方法,即使有。处理它的方法是在代码顶部导入标题。

#import <classimhooking> 
+0

这并没有提供问题的答案。一旦你有足够的[声誉](http://stackoverflow.com/help/whats-reputation),你将能够[评论任何职位](http://stackoverflow.com/help/privileges/comment);相反,[提供不需要提问者澄清的答案](http://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- I-DO-代替)。 - [来自评论](/ review/low-quality-posts/12433200) – ozgur

+0

@ozgur:开始是对问题的解释。最终是一个解决方案。为什么它应该是评论而不是答案? – zondo