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或任何其他一个什么都不会发生。 那么如何解决这个问题。

谢谢。

+0

'alertView(UIAlertView *)alertView':不应该编译,缺少“:”。而'mc'零? – Larme 2014-10-06 17:39:05

+0

@Larme这不是真正的代码,这只是我刚才写的一个例子,所以它可能有一些错误。而MyClass是一个没有自定义初始化的新类,所以它是零。 – user3628430 2014-10-06 17:42:08

+0

如果'mc'是'nil',你希望它成为委托并对它做出响应? – Larme 2014-10-06 17:48:09

您需要实际分配/初始化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]; 
} 
+0

也许可以将视图移到视图控制器的生命周期的后面。 – 2014-10-06 17:43:46

+0

@Andy_Obusek谢谢,这真的有帮助。 – user3628430 2014-10-06 17:47:25

你设定的委托,它不会是一个对象看起来你已经初始化了。确保mc不是零,如果是,请在创建警报之前添加一个alloc/init行来创建mc

+1

谢谢,它的工作! – user3628430 2014-10-06 17:48:09

+0

太棒了! :)一定要将问题标记为已回答,并对任何有帮助的答案进行投票。 – Nerrolken 2014-10-06 17:50:04