Данные IOS между контроллерами представления

У меня есть навигационный контроллер с 2 контроллерами представления, A и B.

A и B оба имеют свойство

@property (strong, nonatomic) NSString *string;

Строка создается в контроллере A и передается в контроллер B

ViewControllerB.string = self.string;
[self.navigationController pushViewController:ViewControllerB];

В View Controller B строка модифицируется, и когда я открываю окно View Controller A, значение строки не изменяется.

Поскольку они оба содержат сильную ссылку на него, не следует ли менять строку в обоих контроллерах вида?

Я что-то пропустил?

1 ответ

Решение

В View Controller B строка модифицируется

Это невозможно, так как вы используете NSStringне NSMutableString, Если вы замените его в течение ViewControllerB:

self.string = @"some other string";

Тогда вы устанавливаете ViewControllerB"s string свойство ссылаться на эту новую строку, но другие ссылки на исходную строку не затрагиваются.

Если вы действительно хотите, чтобы оба контроллера представления изменили одну и ту же строку, используйте NSMutableString, Но общее изменяемое состояние, вероятно, плохо. Вместо этого рассмотрите возможность использования промежуточного класса (например, источника данных) или шаблона делегата для ViewControllerB в руки ViewControllerA обновленная строка.

Другие вопросы по тегам