Разница Objective-C в методах конкатенации - PullRequest
0 голосов
/ 01 июля 2011

уточняющий вопрос здесь.Первоначально я пытался объединить две строки, используя метод stringByAppendingString:

NSString *dataString = @",";
NSInteger i = 0;
NSString *cycleCountString = @"";
for (i = 0; i<[[self cycleList] count]; i++) {

    cycleCountString = [NSString stringWithFormat:@"cycle#%d,",i];
    [dataString stringByAppendingString:cycleCountString];
}
NSLog(@"DataString is: %@",dataString);

Однако NSLog просто выводил ",", как будто cycleCountString не добавлялось к dataString.

После прочтения: /483518/yarlyki-v-objective-c-dlya-obedineniya-strok-nss я смог решить проблему, выполнив stringWithFromat:

NSString *dataString = @",";
NSInteger i = 0;
NSString *cycleCountString = @"";
for (i = 0; i<[[self cycleList] count]; i++) {

    cycleCountString = [NSString stringWithFormat:@"cycle#%d,",i];
    dataString = [NSString stringWithFormat:@"%@%@",dataString,cycleCountString];


}
NSLog(@"DataString is: %@",dataString);

любую идею, почему предыдущий метод не работал?stringByAppendingString не работает так, как я думаю?

спасибо!

Ответы [ 4 ]

3 голосов
/ 01 июля 2011

Вы никогда не обновляете значение dataString.

dataString = [dataString stringByAppendingString: cycleCountString];
1 голос
/ 01 июля 2011

Пример в документации

NSString *errorTag = @"Error: ";
NSString *errorString = @"premature end of file.";
NSString *errorMessage = [errorTag stringByAppendingString:errorString];

создает строку «Ошибка: преждевременный конец файла.».

1 голос
/ 01 июля 2011

NSString экземпляры неизменны - вы не можете их изменить. stringByAppendingString: не изменяет исходный экземпляр NSString, он создает новый NSString и возвращает его.

Новая версия работает, потому что вы присваиваете результат stringWithFormat: для dataString. Вы можете заставить старую версию работать с чем-то вроде этого:

dataString = [dataString stringByAppendingString:cycleCountString];
0 голосов
/ 01 июля 2011

потому что вы не присвоили agian строке данных

NSString *dataString = @",";
NSInteger i = 0;
NSString *cycleCountString = @"";
for (i = 0; i<[[self cycleList] count]; i++) {

    cycleCountString = [NSString stringWithFormat:@"cycle#%d,",i];

    dataString=[dataString stringByAppendingString:cycleCountString];//this Line
}

NSLog(@"DataString is: %@",dataString);

DataString:, цикл № 0, цикл № 1, цикл № 2,

...