Objective c setByAddingObject没有添加对象…抱怨

Objective c setByAddingObject没有添加对象…抱怨,objective-c,nsset,Objective C,Nsset,所以我的问题基本上是这样的,我通过一个可变的数字和字符串数组进行解析,试图找到变量。我有一个私有的helper方法,它工作得很好,可以区分操作(@“+”、@“-”等)和变量(@“x”、“y”等)。问题是,下面我的else块中的代码不起作用。我在else语句中加入了@“x”或@“y”,但我试图创建的NSSet不起作用。我只是保留NSLog(ging)“返回变量为空”。有什么想法吗 + (NSSet *)variablesUsedInProgram:(id)program { NSMuta

所以我的问题基本上是这样的,我通过一个可变的数字和字符串数组进行解析,试图找到变量。我有一个私有的helper方法,它工作得很好,可以区分操作(@“+”、@“-”等)和变量(@“x”、“y”等)。问题是,下面我的else块中的代码不起作用。我在else语句中加入了@“x”或@“y”,但我试图创建的NSSet不起作用。我只是保留NSLog(ging)“返回变量为空”。有什么想法吗

+ (NSSet *)variablesUsedInProgram:(id)program
{

    NSMutableArray *stack;

    if([program isKindOfClass:[NSArray class]]){
        stack = [program mutableCopy];
    }

    NSSet *returnVariables = nil;

    for (int i=0; i<stack.count; i++) {
        if ([[stack objectAtIndex:i] isKindOfClass:[NSString class]]) {
            if ([self isOperation:[stack objectAtIndex:i]]) {
                continue;
            } else {
                returnVariables = [returnVariables setByAddingObject:[stack objectAtIndex:i]];
                if (returnVariables.count == 0) {
                    NSLog(@"returnVariables is empty");
                }
            }
        } 
    }

    return returnVariables;
}
+(NSSet*)变量使用程序:(id)程序
{
NSMutableArray*堆栈;
if([program isKindOfClass:[NSArray class]]){
堆栈=[program mutableCopy];
}
NSSet*returnVariables=nil;

对于(int i=0;i这是因为您没有初始化returnVariables。更改此行:

NSSet *returnVariables = nil;
为此:

NSSet *returnVariables = [NSSet set];
-[NSSet setByAddingObject://code>是一个实例方法,意味着它将在NSSet的实例上被调用。它并不意味着从头开始创建一个新的集,而是使用您调用它的现有集并创建一个新集,该新集是该集的副本,其中添加了一个附加对象,并返回该新集

更好的方法是使用NSMutableSet:

NSMutableSet returnVariables = [NSMutableSet mutableSet];

// Inside your loop:
[returnVariables addObject:[stack objectAtIndex:i]];

这么简单,我现在就不再把头撞在墙上了,谢谢安德鲁