Вам нужно использовать NSMutableString
NSMutableString *mu = [NSMutableString stringWithString:dir];
[mu insertString:@" " atIndex:5];
или вы можете использовать этот метод для разделения вашей строки:
- substringFromIndex:
- substringWithRange:
- substringToIndex:
и рекомбинировать их после с
- stringByAppendingFormat:
- stringByAppendingString:
- stringByPaddingToLength: withString: начальныйAtIndex:
Но этот путь - больше проблем, чем он того стоит. А поскольку NSString
является неизменным, вы бы поставили много объектов на создание ничего.
NSString *s = @"abcdefghijklmnop";
NSMutableString *mu = [NSMutableString stringWithString:s];
[mu insertString:@" || " atIndex:5];
// This is one option
s = [mu copy];
//[(id)s insertString:@"er" atIndex:7]; This will crash your app because s is not mutable
// This is an other option
s = [NSString stringWithString:mu];
// The Following code is not good
s = mu;
[mu replaceCharactersInRange:NSMakeRange(0, [mu length]) withString:@"Changed string!!!"];
NSLog(@" s == %@ : while mu == %@ ", s, mu);
// ----> Not good because the output is the following line
// s == Changed string!!! : while mu == Changed string!!!
Что может привести к трудностям при отладке.
Вот почему @property
для строки обычно определяют как copy
, поэтому, если вы получите NSMutableString
, сделав копию, вы уверены, что она не изменится из-за какого-то другого неожиданного кода.
Я предпочитаю s = [NSString stringWithString:mu];
, потому что вы не путаетесь с копированием изменяемого объекта и возвращением неизменного.