Изменение исходных данных из detailView? - PullRequest
0 голосов
/ 03 марта 2011

Я работаю на iPhone и использую навигацию.

У меня есть список данных в RootViewController, и я передаю одни данные в detailViewController при нажатии на ячейку. Вот так

detailViewController.message = [tableData objectAtIndex:indexPath.row];

И я хочу изменить содержимое 'message' в detailViewController. Это возможно?

Я пробовал это, но я получаю ошибку, что это неизменный объект. Как я могу это сделать? Кто-нибудь подскажет мне. Спасибо;)

Добавлено ---------------------------------------------- -

Ok. Я уточню вопрос.

в detailViewController, объявлено сообщение NSMutableDictionary * type.

и используется вот так.

NSMutableString *str = [m_message objectForKey:KEY_CONTENT];
[str appendFormat:@"appended!"];

И у меня есть это сообщение.

* Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «Попытка изменить неизменяемый объект с appendFormat:«

Разве я не могу просто изменить его содержимое, как изменение данных в c ++ с помощью указателя?

Ответы [ 3 ]

2 голосов
/ 03 марта 2011

Я думаю, что было бы лучше использовать шаблон делегата для этого. Создайте протокол DetailViewControllerDelegate, который информирует своего делегата об измененном сообщении. Что-то вроде:

-(void)detailViewController:(DetailViewController *)controller didChangeMessage:(NSString *)message;

Вы также можете напрямую манипулировать объектом, используя изменяемый объект (NSMutableString, NSMutableArray и т. Д.), Но использование делегата улучшает возможность повторного использования и разъединяет ваши классы.

EDIT:

Тот факт, что ваш словарь изменчив, не означает, что объект внутри него также изменчив. Ваша строка str, вероятно, неизменна. Поскольку NSMutableString является подклассом NSString, назначение будет работать. Вы должны убедиться, что вы вставили изменяемую строку в словарь, или используйте метод mutableCopy NSString, чтобы получить изменяемую копию.

0 голосов
/ 03 марта 2011

Ладно, думаю, я понял это. В документации для appendFormat сказано, что appendFormat предназначен для добавления объектов, так же как и при использовании stringWithFormat.

В документации указано, что:

Добавленная строка формируется с использованием NSString's stringWithFormat: метод с перечисленными аргументами.

Вы должны использовать appendString, чтобы получить желаемый результат.

0 голосов
/ 03 марта 2011

Это зависит от того, какой тип объекта вы передаете. Неизменный означает, что вы не можете изменить объект. Если вы, например, используете NSArray, вы должны вместо этого переключиться на NSMutableArray. То же самое для строки или словаря.

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