UIAlertView委托方法clickedButtonAtIndex:不起作用
我有一个类MyClass
,我想将它设置为UIAlertView的委托。我的代码是UIAlertView委托方法clickedButtonAtIndex:不起作用
@interface MyClass : NSObject <UIAlertViewDelegate>
@end
@implementation MyClass
-(void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == 1) {
NSLog(@"Clicked button at Index 1");
}
else {
NSLog(@"Whatever");
}
}
@end
,并在ViewController.m
#import "MyClass"
@interface ViewController() {
}
@end
static MyClass *mc;
@implementation ViewController
-(void)viewDidLoad {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title" message:@"Message" delegate:mc cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", @"nice"];
[alert show];
}
@end
当我运行应用程序时,会出现警告,但是当我点击链接索引1或任何其他一个什么都不会发生。 那么如何解决这个问题。
谢谢。
您需要实际分配/初始化mc
喜欢的东西(不要忘了超级调用):
-(void)viewDidLoad {
[super viewDidLoad];
if (mc == nil)
mc = [MyClass alloc] init];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title" message:@"Message" delegate:mc cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", @"nice"];
[alert show];
}
也许可以将视图移到视图控制器的生命周期的后面。 – 2014-10-06 17:43:46
@Andy_Obusek谢谢,这真的有帮助。 – user3628430 2014-10-06 17:47:25
你设定的委托,它不会是一个对象看起来你已经初始化了。确保mc
不是零,如果是,请在创建警报之前添加一个alloc/init行来创建mc
。
谢谢,它的工作! – user3628430 2014-10-06 17:48:09
太棒了! :)一定要将问题标记为已回答,并对任何有帮助的答案进行投票。 – Nerrolken 2014-10-06 17:50:04
'alertView(UIAlertView *)alertView':不应该编译,缺少“:”。而'mc'零? – Larme 2014-10-06 17:39:05
@Larme这不是真正的代码,这只是我刚才写的一个例子,所以它可能有一些错误。而MyClass是一个没有自定义初始化的新类,所以它是零。 – user3628430 2014-10-06 17:42:08
如果'mc'是'nil',你希望它成为委托并对它做出响应? – Larme 2014-10-06 17:48:09