Это потому, что вы не инициализируете returnVariables. Измените эту строку:
NSSet *returnVariables = nil;
к этому:
NSSet *returnVariables = [NSSet set];
-[NSSet setByAddingObject:]
- это метод экземпляра, то есть он должен вызываться для экземпляра NSSet. Он не предназначен для создания нового набора с нуля, скорее он берет существующий набор, к которому вы вызываете его, и создает новый набор, который является копией этого набора с добавленным к нему дополнительным объектом, и возвращает этот новый набор.
Еще лучше, используйте NSMutableSet:
NSMutableSet returnVariables = [NSMutableSet mutableSet];
// Inside your loop:
[returnVariables addObject:[stack objectAtIndex:i]];