Проблема с моим пользовательским классом и его экземплярами - PullRequest
1 голос
/ 07 февраля 2010

Я создаю приложение, в котором пользователь может щелкнуть карту и услышать различный звук в зависимости от места нажатия. У меня есть точка в многоугольнике для этого, и она отлично работает. Я также создал систему воспроизведения аудио, которая ставит аудиофайлы в очередь и воспроизводит их по порядку. Это тоже работает. Однако я пытаюсь реализовать метод, который проверяет, уже щелкнул ли он ранее по области / полигону, который он только что щелкнул, чтобы один и тот же звук не мог воспроизводиться снова и снова. У меня есть класс PlaceInMap, который содержит многоугольник для области и выполняет необходимые проверки, находится ли нажатая точка в многоугольнике и т. Д. И т. Д. *

На данный момент у меня есть 2 экземпляра этого класса PlaceInMap, хранящихся в NSMutableArray, и всякий раз, когда происходит щелчок, я перебираю этот массив и вызываю метод каждого экземпляра - (BOOL)checkCollisionWithLat:(NSString *)lat andLon:(NSString *)lon. Метод возвращает YES или NO в зависимости от того, находится ли щелчок внутри многоугольника. Это прекрасно работает (я выводю результаты на этикетке). Вот метод:

- (BOOL)checkCollisionWithLat:(NSString *)lat andLon:(NSString *)lon {
    if ( [self isLocationInsideX:lat andY:lon] ) {
        if ( currentlyHere == 0) {
            [[appDelegate audioPlayer] addToQueue:audioFileName];
            [[appDelegate audioPlayer] iterateQueue];                   
        }

        currentlyHere = 1;
        return YES;

    }
    else {

        currentlyHere = 0;      
        return NO;

    }
}

Однако по какой-то причине проверка для currentlyHere, похоже, не работает, за исключением первого экземпляра класса ... Частично.

Вот что происходит: Я получаю свое первоначальное местоположение в бесконечном цикле 1. Это внутри первого экземпляра, звучит звук. Затем я нажимаю на многоугольник на втором экземпляре, и звучит звук. Теперь я снова щелкаю, чтобы создать экземпляр многоугольника, и его звук воспроизводится, когда я снова нажимаю на многоугольник экземпляра, звук не воспроизводится. Но каждый раз после этого, когда я нажимаю на полигон экземпляра, звук воспроизводится так, как и должно быть ...

Теперь, когда я удаляю это if ( currentlyHere == 0 ), звуки воспроизводятся правильно ...

В настоящее время это NSInteger, но я пробовал это с int и BOOL также ...

Это довольно странно ... Текстовый вывод всегда правильно показывает, на каком полигоне я щелкнул.

И извините за опечатки мои глаза закончились ... = P

Edit:
В настоящее время в заголовке класса определена переменная экземпляра. Это начало класса:

- (id) init {
    if (self = [super init]) {

        currentlyHere = 0;
        [self setAppDelegate:[[UIApplication sharedApplication] delegate]];

    }

    return self;
}

1 Ответ

1 голос
/ 07 февраля 2010

Кажется, что переменная currentlyHere не установлена ​​в ноль; может быть, метод обнаружения попадания не вызывается, когда вы находитесь снаружи. Добавьте несколько NSLog операторов перед тестами, чтобы проверить значение currentlyHere.

- (BOOL)checkCollisionWithLat:(NSString *)lat andLon:(NSString *)lon {
    NSLog("In checkCollisionWithLat (%d)", currentlyHere);
    if ( [self isLocationInsideX:lat andY:lon] ) {
        NSLog("Inside (%d)", currentlyHere);
        if ( currentlyHere == 0) {
            [[appDelegate audioPlayer] addToQueue:audioFileName];
            [[appDelegate audioPlayer] iterateQueue];                   
        }

        currentlyHere = 1;
        return YES;

    }
    else {
        NSLog("Outside (%d)", currentlyHere);

        currentlyHere = 0;      
        return NO;

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...