1

我正在开发一个应用程序,我有一个要求,即当有来电时调用相应的方法。我编写了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>没有调用委托方法,任何人都可以提前解决我的问题。

4

1 回答 1

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

在类方法的上下文中,self指的是类本身,而不是对象的实例(类方法如何知道类的实例?)。因此,您必须要么将incomingCallAlertView:方法变成实例方法(即在其前面加上减号而不是加号,并在方法中调用self类名的 insetad showIncomingCalling),要么像实现类方法一样实现委托方法:

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

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

等等

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

于 2012-10-12T12:32:51.927 回答