setByAddingObject不添加对象...发牢骚

问题描述:

所以我的问题基本上是这样的,我解析通过一个可变数组和字符串来尝试找到变量。我有一个私人助手方法,它工作得很好,并在操作(@“+”,@“ - ”等)和变量(@“x”,@“y”等)之间进行区分。问题是,我下面的else代码中的代码不起作用。我使用@“x”或@“y”进入else语句,但我试图创建的NSSet不起作用。我只保留NSLog(ging)“返回变量为空”。有任何想法吗?setByAddingObject不添加对象...发牢骚

+ (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; 
} 

这是因为你没有初始化returnVariables。改变这一行:

NSSet *returnVariables = nil; 

这样:

NSSet *returnVariables = [NSSet set]; 

-[NSSet setByAddingObject:]是一个实例方法,这意味着它是对的NSSet的实例调用。这并不意味着从头开始创建一个新的集合,而是需要您调用它的现有集合并创建一个新集合,该集合是添加了附加对象的集合的副本,并返回该新集合。

更妙的是,使用的NSMutableSet:

NSMutableSet returnVariables = [NSMutableSet mutableSet]; 

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

这么简单,我会停止抨击我的头靠在墙上现在,由于安德鲁 – wvm2008 2012-03-07 17:21:40