Данные 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
обновленная строка.