崩溃在NSString replaceCharactersInRange

时间:2011-12-30 19:37:01

标签: objective-c ios nsstring

我有以下代码:

-(void) swapCharacters: (NSMutableString *) set : (NSInteger) first : (NSInteger) second    {

NSLog(@"swap: set = '%@', first = '%d', second = '%d'", set, first, second);
NSRange rangeSecond = NSMakeRange((NSUInteger) second, 1);
NSRange rangeFirst = NSMakeRange((NSUInteger) first, 1);

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

NSLog打印是:set ='happy',first ='0',second ='0' 但程序在[set rangeFirst = ...........]崩溃而没有任何调试信息。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

我在代码中发现了一些应该更改的内容。以下是我为使交换功能工作所做的工作。

这是功能:

-(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 或字符串格式时,%@ 适用于对象(NSString,NSInteger ...),%i 适用于int,%f 用于浮点数,%d 用于加倍

我希望有帮助,快乐的编码!

答案 1 :(得分:0)

我只是试试你的代码,它就像我一样为我工作

-(void) swapCharacters: (NSMutableString *) set first: (NSInteger) first second: (NSInteger) second    {

NSLog(@"swap: set = '%@', first = '%d', second = '%d'", set, first, second);
NSRange rangeSecond = NSMakeRange((NSUInteger) second, 1);
NSRange rangeFirst = NSMakeRange((NSUInteger) first, 1);

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

我称之为

NSMutableString *s = [NSMutableString stringWithString:@"Hello"];
[self swapCharacters:s first:0 second:3];
NSLog(@"s == %@", s);

这是我得到的NSLog:

  

2011-12-30 15:13:48.822 tabbar [908:207] swap:set ='Hello',first ='0',second ='3'
  2011-12-30 15:13:48.823 tabbar [908:207] s == HelHo


在调用它时,是否将NSMutableString或NSString传递给该方法? 通过NSString,这是我能够使代码崩溃的唯一方法。