0

ロック画面にボタンが1つあり、触れたときにアラートを表示します。このようなもので遊んで、これをやろうとしましたが、ボタンに触れるとクラッシュし、再起動してセーフモードに入ります。iPhoneでtheosを使用して実行しています。コードは次のとおりです。

#import <UIKit/UIKit.h>


@interface SBAwayView : UIView

@end


@interface SBAwayController

UIButton *myButton;
-(void)unlockWithSound : (BOOL)sound;

@end



%hook SBAwayController

-(id)lock{

SBAwayView *v = MSHookIvar<id>(self, "_awayView");

myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
myButton.frame = CGRectMake(21, 80, 100, 35);
[myButton setTitle:@"My Button" forState:UIControlStateNormal];
[myButton addTarget:self action:@selector(myButtonPressed)     forControlEvents:UIControlEventTouchUpInside];

[v addSubview:myButton];

%orig;
}

-(void)myButtonPressed{

UIAlertView *theAlert = [[UIAlertView alloc] initWithTitle:@"Title of Alert"  message:@"Message of Alert" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK",  nil];
[theAlert show];
[theAlert release];

}


%end
4

2 に答える 2

0

void; の前に %new(v@:) が必要でした。

%new(v@:)
-(void)myButtonPressed{

UIAlertView *theAlert = [[UIAlertView alloc] initWithTitle:@"Title of Alert"  message:@"Message of Alert" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK",  nil];
[theAlert show];
[theAlert release];

}
于 2012-09-17T02:44:48.723 に答える
0

最初にデバッグして、関数が呼び出されるかどうかを確認してください。

それからまたクラッシュし、autorelease を使用してみてください

UIAlertView *theAlert = [[[UIAlertView alloc] initWithTitle:@"Title of Alert" message:@"Message of Alert" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK",  nil] autorelease] ;
[theAlert show];
于 2012-09-03T18:47:15.223 に答える