Ошибка с несколькими кнопками предупреждений и недействительными

-(void)checkCollision{
if (CGRectIntersectsRect(player.frame, enemy.frame)) {

    [randomMain invalidate];
    [start setHidden:NO];

    CGRect frame = [player frame];
    frame.origin.x = 137.0f;
    frame.origin.y = 326.0;
    [player setFrame:frame];

    CGRect frame2 = [enemy frame];
    frame2.origin.x = 137.0f;
    frame2.origin.y = 20.0;
    [enemy setFrame:frame2];


    [randomMain invalidate];
    [start setHidden:NO];

    [timer invalidate];
    time.text = @"0";

Здравствуйте, проблема, с которой я столкнулся, заключается в том, что я пытаюсь создать вид предупреждений ниже, но получаю сообщение об ошибке следующего содержания: Недопустимый тип аргумента "void" для унарного выражения. в строке: - (void) alert1: (UIAlertView *) alertView clickedButtonAtIndex: (NSInteger) ButtonIndex {Ура

    time.text = @"0"; 
    [timer invalidate];




          NSString *timemessage = [NSString stringWithFormat:@"Unlucky! You survived for %i seconds!", timenumber];
              UIAlertView *alert1 = [[UIAlertView alloc] initWithTitle:@"You've Been Caught!" message:timemessage delegate:nil cancelButtonTitle:@"Try Again" otherButtonTitles:@"Show Leaderboard", @"Submit To game Center",nil];
    [alert1 show];




              -(void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)ButtonIndex {
        if (ButtonIndex == 1) {
        GKScore *myScore = [[GKScore alloc]
                            initWithCategory:@"*****"];
            myScore.value = timenumber;



        }
        }










                }}
            ;

person user1612646    schedule 20.08.2012    source источник


Ответы (1)


Строка -(void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)ButtonIndex { - это начало нового метода. Его нельзя заключать внутрь checkCollision. Вам нужно переместить его и весь его код наружу. Если хотите, он может идти сразу после конца checkCollision. Вам также необходимо установить делегата UIAlertView на объект, который вы хотите получить alertView:clickedButtonAtIndex: обратный вызов. Обычно это self. Что-то вроде этого:

-(void)checkCollision {
    // Blah, blah, ....
    NSString *timemessage = [NSString stringWithFormat:@"Unlucky! You survived for %i seconds!", timenumber];
    UIAlertView *alert1 = [[UIAlertView alloc] initWithTitle:@"You've Been Caught!" message:timemessage delegate:self cancelButtonTitle:@"Try Again" otherButtonTitles:@"Show Leaderboard", @"Submit To game Center",nil];
    [alert1 show];
}

-(void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)ButtonIndex {
    if (ButtonIndex == 1) {
        GKScore *myScore = [[GKScore alloc] initWithCategory:@"*****"];
        myScore.value = timenumber;
    }
    // Handle other button choices ....
}
person torrey.lyons    schedule 20.08.2012
comment
Ошибок нет, но кнопки ничего не делают, и когда вы говорите весь его код, вы имеете в виду только кнопки просмотра недействительных предупреждений или начальное предупреждение для - person user1612646; 21.08.2012
comment
да, но я сделал int timenumber; в файле заголовка и попытался сделать то, что вы сделали, но это не сработало, у меня осталось множество ошибок - person user1612646; 21.08.2012
comment
Я имел в виду код как пример. Вы не предоставили нам весь свой код, поэтому мы не можем написать именно тот код, который вам нужен. Если в заголовке есть номер времени, то, очевидно, он вам здесь не нужен. Дело в том, что вам нужно создать свой UIAlertView, как я показал, затем показать его, а затем где-нибудь еще в классе, который вам нужно реализовать alertView:clickedButtonAtIndex:. Если вы получаете ошибки в этих строках, не стесняйтесь их публиковать. - person torrey.lyons; 21.08.2012
comment
Теперь у меня нет ошибок, и я скопировал ваш код, но ничего не происходит, когда я нажимаю кнопки ??? - person user1612646; 21.08.2012
comment
Когда вы говорите, что ничего не происходит, вы имеете в виду, что представление предупреждений никогда не закрывается, или оно просто закрывается без каких-либо действий? В моем примере кода ничего не отображается на экране, когда вы нажимаете кнопку. Вам нужно будет заполнить оставшуюся часть кода для alertView:clickedButtonAtIndex:, чтобы заставить его делать то, что вы хотите. Вы можете добавить оператор NSLog(@"Clicked something!") в начале метода, чтобы убедиться, что он вызывается при нажатии кнопки. Если нет, вероятно, у вас все еще неправильно установлен делегат. - person torrey.lyons; 22.08.2012