2014-02-08 3 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 и называть его, но он не найден, я пробовал то же самое с задержкой, но он не найден. Я попытался определить переменную моего класса и вызвать ее, но она не работает.

Я также вижу, что вы можете напрямую захватить iVars, но это не работает с методами.

Любые идеи будут оценены.

+0

Ваш вопрос не очень ясен. предложение написать это [self method: arg]; в режиме viewdidload вашего контроллера. viewdidload - это вызов, когда загружается ваш viewcontroller. & what are these% orig. – Pawan

+0

Это директивы Theos, которые вызывают оригинальный метод класса, который я подключаю. Этот вопрос относится только к теосу, поскольку то, что вы написали, действительно будет работать в стандартной цели c. –

+0

им очень жаль. Я не знал этого. постарается ответить вам как можно скорее. thanks – 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-need-50-reputation-to-comment-what-can- я-делать-вместо этого). - [Из обзора] (/ review/low-quality-posts/12433200) – ozgur

+0

@ozgur: начало объяснения проблемы; конец - это решение. Почему это должен быть комментарий вместо ответа? – zondo

Смежные вопросы