2014-02-08 160 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