간단한 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
위은 간단한 꼬집는 것으로 만들었습니다.몇 가지 이유를 설치 한 후,아무것도 작업,그냥 알아낼 수 없습니다 문제가 무엇이며 어떻게 이 문제를 해결하는가?
다른 질문은 다음과 같습니다.
- 왜 우리는 다음과 같이 클래스 선언
SBIconController
이 있을 때 이미SBIconController
등? - 우리가 왜 선언대로 그것의 하위 클래스
NSObject
? - 왜 우리는 유형에 SBIconController 때 우리는 전화
[SBIconController sharedInstance]
대[objc_getClass("SBIconController") sharedInstance]
?
감사합니다 당신의 도움에 대 한 많은!
해결책
코드는 괜찮습니다.나는 그것을 테스트(를 사용하지 않는 로고)와 iconTapped:
방법은 실제로 불을 누르면 앱 아이콘이다.하지만 당신은 무엇을 하려고 달성하기 isEditing
?이 숙박 시설을 나타내는지 여부를 편집하고 있는 발판(길게 누르는 응용 프로그램 아이콘)때와 같음 YES
방법 iconTapped:
호출하지 않을 때 아이콘이 있습니다.그것은 경우에만 호출 isEditing
equals NO
.그래서 나는 당신이 삽입하지 않고 경고 if ([sbic isEditing])
지 여부를 테스트하는 귀하의 조정이 작동하는 것입니다.
로에 대한 다른 질문:
- 다룰 때는 프라이빗 Api 우리는 없어 헤더를 얻을 것이 경고/오는 경우 우리가 사용하려고 합니다.귀하의 경우에는 그것의
SBIconController
.이 문제를 해결하기 위해 우리는를 다운로드하거나 헤더가 다른 사람이 버려진 다양한 도구를 사용하여 다음과 같 클래스-덤프 또는 선언한 이러한 개인 Api 자신입니다.귀하의 경우에 그것은 후자입니다. - 기
SBIconController
에서 상속NSObject
. 당신이 그것을 할 수 있습니다.의 과정,당신이 클래스 선언을 사용할 필요가 없
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
제휴하지 않습니다 StackOverflow