Я вижу довольно много вещей, которые могут быть неправильными в вашем коде, но вещь, которая выглядит хуже: вы удаляете объекты в массиве, начиная с индекса 0, вплоть до счетчика.Это будет означать, что i = 0,1,2,3, в то время как массив продолжает сдвигать элементы обратно в позицию 0. Это, безусловно, вызовет исключение, и только половина массива может быть очищена таким образом.
Альтернатива: используйте метод, который очищает массив ([bookListMutable removeAllObjects]
), или переберите счетчик до 0.