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]];
这么简单,我会停止抨击我的头靠在墙上现在,由于安德鲁 – wvm2008 2012-03-07 17:21:40