シンプルなiPhoneの脱獄が働いていません
質問
#import <UIKit/UIAlertView.h>
@class NSObject;
@interface SBIconController : NSObject
+ (SBIconController *)sharedInstance;
- (BOOL)isEditing;
@end
%hook SBIconController
-(void)iconTapped:(id)tapped {
SBIconController *sbic = [objc_getClass("SBIconController") sharedInstance];
if ([sbic isEditing]) {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Message" message:[NSString stringWithFormat:@"%@", tapped] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];
[alertView release];
}
%orig;
}
%end
.
上記のP>は、ロゴで作成した単純な微調整です。インストール後の何らかの理由で、何も動作していません、私は問題が何であるか、そしてこの問題を解決する方法を理解することはできませんか?
私が持っているその他の質問:
-
SBIconController
クラスがある場合は、SBIconController
のようなクラスを宣言するのですか? -
NSObject
のサブクラスとして宣言するのはなぜですか? -
[SBIconController sharedInstance]
の代わりに[objc_getClass("SBIconController") sharedInstance]
を呼び出しているときは、SbiConControllerを入力しないのですか?
あなたの助けのためにたくさんありがとう!
解決
コードは大丈夫です。私はそれをテストしました(私はロゴを使用しません)、iconTapped:
メソッドは実際にアプリアイコンをタップしたときに呼び出されます。しかし、isEditing
で何を達成しようとしているのですか?このプロパティは、スプリングボードを編集しているかどうかを示します(アプリアイコンをタップして保持します)、YES
メソッドに似たときには、アイコンがタップされたときに呼び出されません。 iconTapped:
がisEditing
に等しい場合にのみ呼び出されます。だから私はあなたがあなたの調整が働いているかどうかをテストするためにNO
なしで警告を挿入することをお勧めします。
あなたの他の質問は:
- プライベートAPIを扱うとき、ヘッダーはありません。それらを使用しようとすると警告/エラーが発生します。あなたの場合は
if ([sbic isEditing])
です。この問題を解決するために、他の人がクラスダンプのようなさまざまなツールを使用してダンプされたヘッダーをダウンロードするか、またはこれらのプライベートAPIを自分で宣言することができます。あなたの症例では後者です。 -
SBIconController
はSBIconController
から継承しています。 -
どちらにもできます。もちろん、クラス宣言がある場合は、
NSObject
を使用する必要はありません。そしてあなたの場合には、このことのいずれかを必要としません。他のOBJ-Cメソッドのようにobjc_getClass
を使用することができます。あなたのコードは次のようになります:%hook SBIconController -(void)iconTapped:(id)tapped { if ([self isEditing]) { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Message" message:[NSString stringWithFormat:@"%@", tapped] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alertView show]; [alertView release]; } %orig; } %end
所属していません StackOverflow