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
希望有帮助,快乐编码!
- Firebase观察types.childAdded每次检索我的所有信息。 请协助
- 如何让Google Map的“myLocationEnabled”蓝点始终位于顶部
- 全面轻扫UITableViewCell删除UITableView iOS 8
- 从iPad(Objective C)到MVP Web API(C#)的时区映射
- 在iOS 9快捷工具栏模式下,与键盘顶部alignment的视图出现在错误的位置
- gpus_ReturnGuiltyForHardwareRestart
- 由CACurrentMediaTime()引起的架构i386编译错误的未定义符号
- 核心数据:为什么必须调用重新加载数据才能使我的应用运行?
- 如何以编程方式从UIView获取约束