2012-03-07 35 views
0

所以我的問題基本上是這樣的,我解析通過一個可變數組和字符串來嘗試找到變量。我有一個私人助手方法,它工作得很好,並在操作(@「+」,@「 - 」等)和變量(@「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; 
} 

回答

1

這是因爲你沒有初始化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