質問

#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なしで警告を挿入することをお勧めします。

あなたの他の質問は:

  1. プライベートAPIを扱うとき、ヘッダーはありません。それらを使用しようとすると警告/エラーが発生します。あなたの場合はif ([sbic isEditing])です。この問題を解決するために、他の人がクラスダンプのようなさまざまなツールを使用してダンプされたヘッダーをダウンロードするか、またはこれらのプライベートAPIを自分で宣言することができます。あなたの症例では後者です。
  2. SBIconControllerSBIconControllerから継承しています。
  3. どちらにもできます。もちろん、クラス宣言がある場合は、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
    
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top