문제

#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

위은 간단한 꼬집는 것으로 만들었습니다.몇 가지 이유를 설치 한 후,아무것도 작업,그냥 알아낼 수 없습니다 문제가 무엇이며 어떻게 이 문제를 해결하는가?

다른 질문은 다음과 같습니다.

  • 왜 우리는 다음과 같이 클래스 선언 SBIconController 이 있을 때 이미 SBIconController 등?
  • 우리가 왜 선언대로 그것의 하위 클래스 NSObject?
  • 왜 우리는 유형에 SBIconController 때 우리는 전화 [SBIconController sharedInstance][objc_getClass("SBIconController") sharedInstance]?

감사합니다 당신의 도움에 대 한 많은!

도움이 되었습니까?

해결책

코드는 괜찮습니다.나는 그것을 테스트(를 사용하지 않는 로고)와 iconTapped: 방법은 실제로 불을 누르면 앱 아이콘이다.하지만 당신은 무엇을 하려고 달성하기 isEditing?이 숙박 시설을 나타내는지 여부를 편집하고 있는 발판(길게 누르는 응용 프로그램 아이콘)때와 같음 YES 방법 iconTapped: 호출하지 않을 때 아이콘이 있습니다.그것은 경우에만 호출 isEditing equals NO.그래서 나는 당신이 삽입하지 않고 경고 if ([sbic isEditing]) 지 여부를 테스트하는 귀하의 조정이 작동하는 것입니다.

로에 대한 다른 질문:

  1. 다룰 때는 프라이빗 Api 우리는 없어 헤더를 얻을 것이 경고/오는 경우 우리가 사용하려고 합니다.귀하의 경우에는 그것의 SBIconController.이 문제를 해결하기 위해 우리는를 다운로드하거나 헤더가 다른 사람이 버려진 다양한 도구를 사용하여 다음과 같 클래스-덤프 또는 선언한 이러한 개인 Api 자신입니다.귀하의 경우에 그것은 후자입니다.
  2. SBIconController 에서 상속 NSObject.
  3. 당신이 그것을 할 수 있습니다.의 과정,당신이 클래스 선언을 사용할 필요가 없 objc_getClass.고 당신의 경우에 당신은 필요 없어도 하나의 이 것들입니다.당신이 사용할 수 있습니다 self 당신 같은 다른 obj-C 방법입니다.귀하의 코드는 다음과 같이 표시됩니다:

    %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