Подозреваю, это означает, что исключение не вызвано строкой, которую вы закомментировали.
Во-первых, почему вы делаете это:
newCachedTileSource = [newCachedTileSource retain];
retain
возвращает себя. Вам не нужно присваивать результат одному и тому же указателю объекта. Если переопределения библиотеки сохраняются для возврата чего-то другого, библиотека разбивается.
Во-вторых, я думаю, что это может быть ошибкой:
[projection release];
projection = [[tileSource projection] retain];
Если projection == [tileSource projection]
до релиза, возможно, что он каким-то образом выходит из-под контроля. Проблема исчезнет, если вы сделаете:
RMProjection* newProjection = [[tileSource projection] retain];
[projection release];
projection = newProjection;
В идеале вы должны создать синтезированное свойство retain для проекции (фактически проекция может просто получить значение из tileSource) следующим образом:
-(RMProjection*) projection
{
return [[self tileSoruce] projection];
}
То же самое для mercatorToTileProjection.