UIAlertView委托方法没有在iphone中调用

时间:2012-10-12 12:24:47

标签: ios iphone objective-c uialertview

我正在开发应用程序,我有一个要求,即有来电时会调用相应的方法。我写了alertview代码,它工作正常,并显示alertview。

Alertview包含两个按钮接受和拒绝,当我点击任何这些按钮时,不会调用alertview委托方法。

+ (void)incomingCallAlertView:(NSString *)string
{
    UIAlertView *callAlertView=[[UIAlertView alloc] initWithTitle:string message:@""   delegate:self cancelButtonTitle:@"reject" otherButtonTitles:@"accept",nil];
    [callAlertView show];
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{

    NSLog(@"clickedButtonAtIndex");

    if(buttonIndex==0)
    {
          NSLog(@"buttonindex 0");
    }
    else
    {
          NSLog(@"buttonindex 1");
    }

}

我使用主线程从另一个方法调用+(void)incomingcall方法。

- (void)showIncomingcalling
{
     [CallingViewController performSelectorOnMainThread:@selector(incomingCallAlertView:)      withObject:@"on_incoming_call" waitUntilDone:YES];
}

我在类中编写协议,即<UIAlertViewDelegate>,但代理方法没有被调用,任何人都可以提前解决我的问题。

1 个答案:

答案 0 :(得分:19)

initWithTitle:string message:@"" delegate:self
                                           ^^
                                      Here it is!

在类方法的上下文中,self引用类本身,而不是对象的实例(类方法如何知道类的实例?)。因此,您必须将incomingCallAlertView:方法转换为实例方法(即在其前面添加减号而不是加号,并在类名称中调用self insetad showIncomingCalling方法),或者将委托方法实现为类方法:

+ (void)alertView:(UIAlertView *)av clickedButtonAtIndex:(NSInteger)index

(这个确实有用,因为类对象本身是其元类的一个实例,这意味着类方法实际上只是元类的实例方法。)

顺便说一下,仔细阅读一篇体面的Objective-C教程和/或语言参考资料。这个问题不应该在这里被问到,因为它太基本了,不能在其他资源中查找。