Проблема с целью UIALERTVIEW c - PullRequest
1 голос
/ 05 марта 2011

У меня странная проблема с представлениями uialert.

У меня есть несколько предупреждений, которые являются переменными-членами в моем файле .h

UIAlertView *changepwalert;  //change password alert.
UIAlertView *delallalert;  //delete selected transactions.
UIAlertView *logout; //logout alert.
UIAlertView *closingbalancealert; //closing balance alert.
UIAlertView *totalreportalert; //total report alert.
UIAlertView *ordercashalert; //order cash alert.
UIAlertView *unlockingalert; //unlocking alert.
UIAlertView *receivecashalert;

в моем файле .m У меня есть следующее дляМетод делегата didDismissWithButtonIndex.

if(alertView==unlockingalert && buttonIndex==0)
{
    //code
}

else if(alertView==ordercashalert && buttonIndex==0)
{
    //code

}
else if(alertView==receivecashalert && buttonIndex==0)
{
    //code
}
else if (alertView==logout && buttonIndex == 0)
{
    //code
}
else if(alertView==closingbalancealert && buttonIndex==0)
{
       //code
}
else if (alertView==changepwalert && buttonIndex==0)
{
    //code
}
else if(alertView==delallalert && buttonIndex==0)
{
    //code
}   

Вот пример того, как я инициализирую uialertview

ordercashalert = [[UIAlertView alloc] initWithTitle:nil message:@"Enter Password\n\n\n\n\n\n" delegate:self 
                                    cancelButtonTitle:@"Ok" otherButtonTitles:@"Cancel",nil];


logout = [[UIAlertView alloc] initWithTitle:@"Logout" message:@"Are You Sure?" delegate:self cancelButtonTitle:@"YES" otherButtonTitles:@"NO",nil];
[logout show];
[logout release];

, когда я нажимаю кнопку выхода, он запускает метод делегата, но он соответствует предупреждению дляordercashalert или receivecashalert. Я не уверен, почему.это должно фактически совпасть с предупреждением о выходе из системы.Я нахожусь на заключительной стадии доставки продукта, и вдруг у меня появляется эта ошибка.кто-нибудь может мне помочь, пожалуйста.

1 Ответ

5 голосов
/ 05 марта 2011

Я бы посоветовал вам использовать тег и перечисление. Первый - создать перечисление для всех возможных оповещений:

enum {
    RSChangePasswordAlertTag,
    RSDeleteAlertTag,
    ....
    ReceiveCashAlertTag
};

Затем при создании оповещения просто назначьте ему соответствующий тег

UIAlertView *myAlert = [[[UIAlertView alloc] initWithTitle:....] autorelease];
[myAlert setTag:RSDeleteAlertTag];
[myAlert show];

Затем в методе делегата используйте оператор switch для тега alertView:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSUInteger)buttonIndex {
    switch (alertView.tag) {
        case RSPasswordAlertTag: {
            // Do password alert thing
            break;
        }
        case RSDeleteAlertTag: { 
            // do delete thing
            break;
        }
        .... // here be other cases
    }
}

Таким образом, вы будете сравнивать только целые числа вместо указателей, и ваш код будет чище с меньшим количеством переменных экземпляра.

...