На самом деле у DarkDust все правильно: исходный код для UMRandomOrder показывает, что он правильно возвращает авто-релиз NSMutableArray. Итак, просто измените первые три строки вашего viewDidLoad с:
NSArray* array = [[NSArray alloc]init];
historyQuestions = array;
historyQuestions=UmRandomOrder(49, 1, 0);
просто:
self.historyQuestions=UmRandomOrder(49, 1, 0);
И все будет хорошо.
Если говорить точнее, нет необходимости выделять / инициализировать / назначать массив, который вы собираетесь перезаписать, и с помощью установщика свойств (self.historyQuestions =) вы также автоматически сделаете правильное сохранение как избежать потенциальной утечки памяти. Это также объясняет, почему он работает в viewDidLoad (автоматически выпущенный UmRandomOrder все еще действует), но не в кнопке действия (с тех пор он был выпущен).