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