2013-03-13 3 views
0

У меня есть контроллер просмотра, встроенный в контроллер навигации с одним свойством (неатомный сильный NSMutableArray * myData), когда я нажимаю второе представление. Я также передаю данные этого массива в это представление, используя этот метод :Передача данных обратно между View Controllers embed в UINavigationController

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
     if ([[segue identifier] isEqualToString:@"secondView"]) { 
      SecondViewController *svc = [segue destinationViewController]; 
      svc.myDataInSecondView = self.myData; 
    } 

мой вопрос: Почему, если я изменить какие-либо значения в моем myDataInSecondView массиве и чем я вернусь к первому просмотреть мои значения в массиве MyData изменяются, а? Я всегда думал, что мне нужно использовать пользовательские протоколы и делегаты для передачи любых данных обратно в предыдущее представление.

+0

Если вы передаете указатель на данные другому контроллеру и который меняет данные, он изменяется для обоих. – rooster117

+0

Да в этом случае, но это зависит от того, как объявлено это свойство. – pdrcabrod

+0

Имеет ли значение, если я объявлю свойство с первого взгляда слабым, а не сильным? Если это будет слабое свойство, и я перейду во второе представление, объект myData будет освобожден? – Guferos

ответ

1

То, как вы это делаете, является очень распространенным способом обмена данными между диспетчерами. Второй контроллер представления имеет свойство, которое может быть установлено с помощью первого контроллера представления. Свойство является указателем, таким же, как и в первом контроллере представления. Обе точки находятся в одном и том же месте в памяти, так что любой контроллер просмотра может изменить эти же данные.

Если вы не хотите, чтобы второй контроллер просмотра изменял данные, установите его как copy.

@property (nonatomic, copy) MyData *myData; 
Смежные вопросы