当我从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;
对于我在这里缺少的东西非常困惑。
答案 0 :(得分:1)
您对访问自动合成的iVar的属性的访问感到困惑。
当你说
时@property BOOL something;
并且不使用@synthesize
语句,编译器将自动创建一个iVar BOOL _something
来存储属性。然后,您可以使用self.something
或_something
访问此媒体资源。除了初始化方法之外,您应该养成始终使用self.something
(或在另一个对象引用的情况下为object.something
)的习惯。
在您的代码中,当您想要在目标控制器上设置属性时,您正在设置本地iVar _didAddNewItem -
controller.didAddNewItem = YES;