在segue中设置目标视图控制器的bool值时遇到问题

时间:2014-10-19 22:09:20

标签: ios objective-c

当我从SearchViewController转到MatchCenterViewController时,我想将_didAddNewItem中的MatchCenterViewController的bool值设置为YES。我试图这样做:

- (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。它正在注销“添加新项目是否”,这告诉我bool的值在segueing之前确实是YES

但是,在切换到目标时,当目标控制器的viewDidAppear运行时,它会注销“不刷新”。

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

我在原始VC和目标VC的头文件中设置了bool属性,如下所示:

@property (assign) BOOL didAddNewItem;

对于我在这里缺少的东西非常困惑。

1 个答案:

答案 0 :(得分:1)

您对访问自动合成的iVar的属性的访问感到困惑。

当你说

@property BOOL something;

并且不使用@synthesize语句,编译器将自动创建一个iVar BOOL _something来存储属性。然后,您可以使用self.something_something访问此媒体资源。除了初始化方法之外,您应该养成始终使用self.something(或在另一个对象引用的情况下为object.something)的习惯。

在您的代码中,当您想要在目标控制器上设置属性时,您正在设置本地iVar _didAddNewItem -

 controller.didAddNewItem = YES;