2014-10-19 3 views
0

Как я от SearchViewController непосредственно перейти к MatchCenterViewController, я хочу, чтобы установить булево значение из _didAddNewItem в MatchCenterViewController к YES. Я пытаюсь сделать это следующим образом:установка булева значения из вида назначения контроллера в Segue Проблема

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"ShowMatchCenterSegue"]) { 
     MatchCenterViewController *controller = (MatchCenterViewController *) segue.destinationViewController; 
     _didAddNewItem = YES; 

     NSLog(@"we're about to set controller values before segueing to MC"); 
     // Send over the matching item criteria 
     controller.itemPriority = self.itemPriority; 

     if (_didAddNewItem == YES) { 
      NSLog(@"Did add new item is YES"); 
     } 
     [self.tabBarController setSelectedIndex:1]; 
    } 
} 

Адресат-контроллер находится вкладка 1, поэтому я хочу, чтобы установить логическое значение, прежде чем он переключается на эту вкладку. Он выводит «Добавил новый элемент ДА», который говорит мне, что значение bool действительно YES непосредственно перед segueing.

Однако при переключении на пункт назначения, когда запускается viewDidAppear контроллера назначения, он выходит из системы «не обновлять».

- (void)viewDidAppear:(BOOL)animated 
{ 
    if (_didAddNewItem == YES) { 
     NSLog(@"well then lets refresh the MC"); 
    } 
    else if (_didAddNewItem == NO) { 
     NSLog(@"dont refresh"); 
    } 
} 

Я установил свойство Его в заголовках как инициирующие и назначение ОК, как так:

@property (assign) BOOL didAddNewItem; 

Очень запутанное, как к тому, что я здесь отсутствую.

ответ

1

Вы вводите в заблуждение доступ к объекту с доступом к автоматически синтезированному iVar.

Когда вы говорите

@property BOOL something; 

и не использовать @synthesize заявление компилятор автоматически создает Ивар BOOL _something для хранения имущества. Затем вы можете получить доступ к этому свойству, используя self.something или _something. Вы должны привыкнуть всегда использовать self.something (или object.something в случае другой ссылки на объект), за исключением методов инициализации.

В своем коде вы устанавливаете локальный Ивар _didAddNewItem когда то, что вы хотите, чтобы установить свойство на контроллере назначения -

controller.didAddNewItem = YES; 
Смежные вопросы