Конвертировать NSString в NSMutableArray - PullRequest
1 голос
/ 23 марта 2011

Я пытаюсь преобразовать (или скопировать?) Строку NSString в массив NSMutableArray.Думаю, моя проблема в том, что я не совсем понимаю структуру MutableArray.Насколько я знаю, массив может выглядеть так:

NoteBook = [[NSMutableArray alloc] init];

for (int temp = 0; temp < 3; temp++) {
    [NoteBook insertObject:@"Page" atIndex:temp];
}

, что даст мне массив PagePagePage .Давайте предположим, что я хотел открыть txt-файл, который содержит PagePagePage, но слова были разделены определенной строкой, чтобы я мог отделить отдельные объекты в моем массиве, например, так: Page --- конец страницы --Page --- конец страницы --- Page .

Теперь, мой следующий шаг - прочитать эту информацию из текстового файла:

NSString *tempTextOut = [NSString stringWithContentsOfFile:filePath
                                                 encoding:NSUTF8StringEncoding
                                                    error:&error];
NoteBook = [tempTextOut componentsSeparatedByString: @"\n--- end of page ---\n"];

Однако,последняя строка не работает, и мне сообщают xCode: несовместимые типы Objective C, присваивающие "struct NSArray *", ожидаемые "struct NSMutableArray *".Я не очень понимаю это - NSArray и MutableArray должны быть совместимы (так как один является подклассом другого).Разве xCode не должен сказать мне, что проблема в том, что я пытался преобразовать NSString в NSMutableArray?

Возможно, мне нужно было бы переустановить мой MutableArray перед тем, как что-то вернуть обратно, потому что сейчас, он все еще содержит PagePagePage , который я назначил ему на первом шаге.Я думал, что мой изменяемый массив NoteBook будет просто заменен строкой, но я думаю, что это не так.

Я был бы очень признателен за любую помощь в этом вопросе.Спасибо!

Ответы [ 2 ]

5 голосов
/ 23 марта 2011

componentsSeparatedByString: возвращает обычный неизменяемый массив NSArray, а не NSMutableArray.Вы можете передать массив в [NSMutableArray arrayWithArray:] или использовать mutableCopy в массиве, чтобы получить из него изменяемый массив, или вы можете использовать addObjectsFromArray: в существующем NSMutableArray, чтобы добавить к нему объекты.

Если выпройдите маршрут mutableCopy, помните, что вы несете ответственность за вызов release или autorelease на нем.

4 голосов
/ 23 марта 2011

Назначение изменяемого объекта тому же неизменяемому типу приведет к ошибкам во время выполнения, если вы захотите манипулировать неизменяемым экземпляром.

Вы можете получить изменяемую копию, вызвав:

NoteBook = [[tempTextOut componentsSeparatedByString: @"\n--- end of page ---\n"] mutableCopy];

Если NoteBook является сохраняемым свойством, вы должны назначить его следующим образом:

self.NoteBook = [[[tempTextOut componentsSeparatedByString: @"\n--- end of page ---\n"] mutableCopy] autorelease];

, чтобы изменяемая копия не была переполнена.Вы можете освободить его в методе dealloc тогда как обычно.

...