0

Clarification question here. I was originally attempting to concatenate two strings using the stringByAppendingString method:

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);

However, the NSLog was just outputing "," as if cycleCountString was not being appended to dataString.

After reading:http://stackoverflow.com/questions/510269/how-do-i-concatenate-strings-in-objective-c , I was able to fix the issue by instead doing a 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);

any idea why the previous method wasn't working? Does stringByAppendingString not work the way I think it does?

thanks!

hemlocker
  • 1,012
  • 1
  • 9
  • 24

4 Answers4

3

You're never updating the value of dataString.

dataString = [dataString stringByAppendingString: cycleCountString];
Patrick Perini
  • 22,555
  • 12
  • 59
  • 88
1

NSString instances are immutable - you can't change them. stringByAppendingString: doesn't change your original NSString instance, it creates a new NSString and returns that.

The new version works because you assign the result of stringWithFormat: to dataString. You could make the old version work with something like this:

dataString = [dataString stringByAppendingString:cycleCountString];
Jim
  • 72,985
  • 14
  • 101
  • 108
1

Example in documentation

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

produces the string “Error: premature end of file.”.

Tatvamasi
  • 2,537
  • 19
  • 14
-1

because u didn't assign agian to datastring

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 is: ,cycle#0,cycle#1,cycle#2,

PengOne
  • 48,188
  • 17
  • 130
  • 149