Цель-C: Как вы добавляете строку в NSMutableString? - PullRequest
1 голос
/ 23 октября 2009

URL Скачать

http://code.google.com/p/mwiphonesdk/source/browse/#svn/trunk/iMADE/PrepTasks/08

У меня есть код в расположении по ссылке выше, и я использую NSMutableString для добавления строк при загрузке данных. Но я обнаружил, что использование appendString не увеличивает длину изменяемой строки. Должно быть, я что-то делаю не так.

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

Я наиболее знаком с Java и C #, где есть StringBuffer / StringBuilder, который позволяет вам добавлять части, и они просто вызывают toString в конце, чтобы получить String. В Objective-C не все так просто.

NSString* str = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];

#pragma mark TODO Confirm this is appending a value to the mutable string
[self.mutableString appendString:str];

NSLog(@"str length: %d, %d", [str length], [self.mutableString length]);

Выше приведен фрагмент кода, который вызывает appendString.

Я вижу, что str имеет длину> 0, но вызов appendString не увеличивает длину self.mutableString.

Что я здесь не так делаю?

Ответы [ 2 ]

7 голосов
/ 23 октября 2009

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

Ваш код выглядит нормально из того, что вы опубликовали. Единственное, о чем я могу думать, это то, что, возможно, нет никаких данных, о которых можно было бы говорить при инициализации переменной str. В таком случае добавление пустой строки ничего не сделает для mutableString.

Вы также захотите убедиться, что self.mutableString был правильно выделен и инициализирован. Вы можете отправлять сообщения NSObject* с nil, которые могут вводить в заблуждение, когда [self.mutableString length] возвращает 0.

3 голосов
/ 23 октября 2009

Я исправил проблему. Я просто не инициализировал значение NSMutableString, и он явно ничего не делал.

Перед добавлением строки я поставил следующий код.

if (_mutableString == nil){
    _mutableString = [[NSMutableString alloc] init];
}

Спасибо всем за ответы. И хорошо знать, что я могу использовать NSMutableString вместо NSString. (это слишком просто):)

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