objective-cparameter passing不正确

我有以下代码:

[self swap:set :begin :begin+i]; //swap 

调用以下交换方法:

 -(void) swap:(NSMutableString *)set:(NSInteger)first:(NSInteger)second { NSRange rangeSecond = NSMakeRange((NSUInteger) second, 1); NSRange rangeFirst = NSMakeRange((NSUInteger) first, 1); NSString *chsecond = [set substringWithRange:rangeSecond ]; [set replaceCharactersInRange:rangeSecond withString:[set substringWithRange:rangeFirst]]; [set replaceCharactersInRange:rangeFirst withString:chsecond]; } 

这个交换例程第一次被调用,它在声明中崩溃了:

 [set replaceCharactersInRange:rangeSecond withString:[set substringWithRange:rangeFirst]]; 

而不留下任何debugging信息。 调用交换之前,我可以hover在设置,开始,我和他们都有有效的价值观。 当我将鼠标hover在“第一个”上时调用swap,它首先表示(数据variables,无debugging信息)(未知types)

这个程序工作正常,突然发生了。 任何想法为什么发生这种情况? 谢谢

这是整个通话链。 启动调用交换的StartPermutate调用置换。 我传递参数的方式有什么问题吗?

 -(void) permute: (NSMutableString *) set :(NSInteger ) begin :(NSInteger ) end { int i; int range = end - begin; if(range == 1) { if([self is_word_valid:set]) { [self addWord:selectedWords : set]; } } else { for(i=0; i<range; i++) { NSLog(@"set = '%@', first = '%@', second = '%@'", set, begin, begin + i); [self swap:set :begin :begin+i]; //swap [self permute:set :begin+1 :end]; // recursion [self swap:set :begin :begin+i]; // swap back } } } -(NSMutableArray *)StartPermutate: (NSMutableString *) letters { [self permute:letters :0 :(NSInteger)[letters length]]; return selectedWords; } 

我想你在其他地方也问过同样的问题。 所以这里的答案也适用于这里。

我发现了一些应该在你的代码中改变的东西。 这是我做了什么让你的交换function的工作。

这是function:

 -(void) swapCharacters: (NSMutableString *)set withInteger: (int)first andInteger: (int)second{ NSLog(@"swap: set = '%@', first = '%i', second = '%i'", set, first, second); NSRange rangeSecond = NSMakeRange(second, 1); NSRange rangeFirst = NSMakeRange(first, 1); [set replaceCharactersInRange:rangeSecond withString:[set substringWithRange:rangeFirst]]; NSLog(@"swap: set = '%@', first = '%i', second = '%i'", set, first, second); } 

这就是函数的调用方式:

 FooClass *fooObjectVar = [[FooClass alloc] init]; NSMutableString *myString = [[NSMutableString alloc] initWithString:@"Hello"]; [fooObjectVar swapCharacters:myString withInteger:0 andInteger:0]; [fooObjectVar release]; [myString release]; 

这是输出:

 2011-12-30 14:19:00.501 StackOverflowHelp[748:903] swap: set = 'Hello', first = '0', second = '0' 2011-12-30 14:19:00.504 StackOverflowHelp[748:903] swap: set = 'Hello', first = '0', second = '0' 

*注意,使用objective-c中的函数名称就像是一个描述

*而不是使用NSInteger,我使用了一个正常的int,因为NSInteger在这里是不必要的

*当使用NSLog或string格式时, %@用于对象(NSString,NSInteger …), %i用于int, %f用于float, %d用于double

希望有帮助,快乐编码!