Кажется, проблема в том, что вы выделяете массив, выполняя
NSArray* configurationArray = [[NSArray alloc] init];
и затем вы создаете новый массив, выполняя
configurationArray = [[NSArray arrayWithContentsOfFile:controllerConfigurationFilePath] retain];
без освобождения первого созданного вами массива. Первая строка должна быть просто
NSArray* configurationArray = nil;
И вам не нужно сохранять, так как это локальная переменная, и вы не держите указатель на этот массив вне области действия этой функции.
Сбой, вероятно, происходит из-за того, что объект, вызывающий этот метод, вероятно, не сохраняет объект, возвращенный этим методом, который будет освобожден вместе с массивом, если ничего не сохранит его. Поэтому, когда вы пытаетесь получить доступ к этому объекту где-то еще в вашем коде, объект больше не существует.
Если вызывающий объект должен сохранить этот возвращенный объект, вызывающий объект должен сохранить возвращенный объект.