Возникли проблемы при добавлении к NSMutableString - PullRequest
2 голосов
/ 28 ноября 2010
@interface MainView : UIView { 
    NSMutableString *mutableString; 
}
@property (nonatomic, retain) NSMutableString *mutableString;
@end

@implementation MainView
@synthesize mutableString;

-(void) InitFunc {  
    self.mutableString=[[NSMutableString alloc] init];
 }

-(void) AppendFunc:(*NString) alpha { 
    [self.mutableString stringByAppendingString:@"hello"];
    NSLog(@"the appended String is: %@",self.mutableString);
    int len=[self.mutableString length];
}

Привет всем,

Я просто хочу знать, где я делаю неправильно ???,Я пробовал этот код, но «mutableString» не добавляет никакого значения (поскольку значение «len» равно «0», а NSLog не печатает никакого значения для «mutableString»), хотя я искал в сети решение, люди, реализованныеТочно так же, пока я не знаю, почему мой код не работает.

Заранее спасибо

MGD

Ответы [ 3 ]

5 голосов
/ 28 ноября 2010

stringByAppendingString: создает новую строку.Вместо этого используйте appendString::

[mutableString appendString: @ "hello"]

3 голосов
/ 28 ноября 2010

1) Имена ваших методов нарушают соглашения об именах: для начала используйте строчные буквы.

2) stringByAppendingString возвращает новую строку в результате и не изменяет ваш оригинал.Вместо этого вы должны использовать [self.mutableString appendString:@"hello"];.

3) Ваш метод инициализации протекает.Вы должны использовать mutableString = [[NSMutableString alloc] init]; и не использовать синтаксис точки, так как в противном случае он будет retain ed (а release будет отсутствовать).

1 голос
/ 28 ноября 2010

О Боже, какой беспорядок.stringByAppendingString не изменяет строку, она создает и возвращает новую:

// Sets str2 to “hello, world”, does not change str1.
NSMutableString *str1 = [NSMutableString stringWithString:@"hello, "];
NSString *str2 = [str1 stringByAppendingString:@"world"];

Если вы хотите изменить саму изменяемую строку, используйте метод appendString:

// Does not return anything, changes str1 in place.
[str1 appendString:@"world"];

Кроме того, это утечка:

self.mutableString = [[NSMutableString alloc] init];

Это лучше всего записать как:

mutableString = [[NSMutableString alloc] init];

… потому что использование методов доступа в init и dealloc не лучшая идея .

...