OP, по-видимому, не перечисляет обрабатываемый массив.

аюсь создать рекурсию, используя блоки. Это работает некоторое время, но в конечном счете это терпит крах и дает мне исключение плохого доступа. Это мой код:

BOOL (^Block)(Square *square, NSMutableArray *processedSquares) = ^(Square *square, NSMutableArray *processedSquares) {
    [processedSquares addObject:square];

    if (square.nuked) {
        return YES; // Found a nuked square, immediately return
    }

    for (Square *adjacentSquare in square.adjacentSquares) {
        if ([processedSquares containsObject:adjacentSquare]) {
            continue; // Prevent infinite recursion
        }

        if (Block(adjacentSquare, processedSquares)) {
            return YES;
        }
    }

    return NO;
};

__block NSMutableArray *processedSquares = [NSMutableArray array];
BOOL foundNukedSquare = Block(square, processedSquares);

Пояснение: у меня естьSquare класс, который имеет BOOLnuked, У этого также есть NSArrayadjacentSquares содержащие другие квадраты.

Я хочу проверить, является ли квадрат или один из его «связанных» квадратов ядерным или нет.

МассивprocessedSquares чтобы отслеживать квадраты, которые я проверил, чтобы предотвратить бесконечную рекурсию.

Когда я запускаю это, он делает много вызовов этого блока (как и ожидалось). Но в какой-то момент происходит сбой на последней строке с исключением из-за плохого доступа.

Я также получаю это в консоли:

Невозможно получить доступ к памяти по адресу 0x1
Невозможно получить доступ к памяти по адресу 0x1
Невозможно получить доступ к памяти по адресу 0x1
Невозможно получить доступ к памяти по адресу 0x1
предупреждение: отмена вызова - код objc в стеке текущего потока делает это небезопасным.

Я не очень знаком с блоками и рекурсией. Есть идеи?

Редактировать 1

По запросу, обратный след:

#0  0x00000001 in ??
#1  0x000115fb in -[Square connectedToNukedSquare] at   Square.m:105
#2  0x00010059 in __-[Bot makeMove]_block_invoke_1 at Bot.m:94
#3  0x91f3f024 in _dispatch_call_block_and_release
#4  0x91f31a8c in _dispatch_queue_drain
#5  0x91f314e8 in _dispatch_queue_invoke
#6  0x91f312fe in _dispatch_worker_thread2
#7  0x91f30d81 in _pthread_wqthread
#8  0x91f30bc6 in start_wqthread

Ответы на вопрос(1)

Ваш ответ на вопрос