Сбой в NSString replaceCharactersInRange - PullRequest
       3

Сбой в NSString replaceCharactersInRange

0 голосов
/ 30 декабря 2011

У меня есть следующий код:

-(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 ]

2 голосов
/ 31 декабря 2011

Я нашел несколько вещей, которые должны быть изменены в вашем коде.Вот что я сделал, чтобы заставить вашу функцию подкачки работать.

Это функция:

-(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'

* Обратите внимание, что с функциями в target-c имя похоже на описание

* Вместо использования NSInteger я использовал обычный int, потому что NSIntegerздесь не требуется

* При использовании NSLog или форматировании строки % @ для объектов (NSString, NSInteger ...), % i для int, % f для float и % d для double

Надеюсь, это помогло, счастливое кодирование!

0 голосов
/ 31 декабря 2011

Я просто пробую ваш код, и он работает для меня вот так

-(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 вкладка [908: 207] swap: set = 'Hello', first = '0', second = '3'
2011-12-30 15: 13: 48.823 tabbar [908: 207] s == HelHo


Передаете ли вы NSMutableString или NSString этому методу при его вызове?
ПередачаNSString это единственный способ, которым я могу сделать этот код сбой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...