我有两个视图控制器,分别说NewGroupView
和GroupsTabView
。我必须从我的第一个视图控制器设置第二个视图控制器的布尔值。这就是我从第一个视图控制器设置第二个视图控制器的值的方式。
NewGroupView *groupView = [self.storyboard instantiateViewControllerWithIdentifier:@"NewGroupViewNC"];
NewGroupView *ngv = [NewGroupView new];
ngv->isGroupViewMode=YES;
groupView.isGroupViewMode = YES;
[self presentViewController:groupView animated:YES completion:nil];
下面是我的第二个视图控制器的接口声明。
@interface NewGroupView : UIViewController<UITableViewDelegate,UITableViewDataSource>
@property(nonatomic,assign) BOOL isGroupViewMode;
@end
在我的视图DidLoad方法中,我尝试将其打印如下,
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(isGroupViewMode ? @"Yes" : @"No");
}
但问题是它总是打印 NO,尽管我已将其设置为 YES。为什么分配的值没有持久化?
使用代码在NewGroupView
中创建一个属性:
@property (nonatomic, assign) BOOL isGroupViewMode;
并在第一视图控制器中编写以下代码:
NewGroupView *groupView = [self.storyboard instantiateViewControllerWithIdentifier:@"NewGroupViewNC"];
groupView.isGroupViewMode = YES;
[self presentViewController:groupView animated:YES completion:nil];
您可以使用第二个视图控制器的日志(viewDidLoad 方法(进行检查:
NSLog(@"%@",isGroupViewMode);
或者,您可以从第一个视图控制器将布尔值存储到 NSUserDefault 中,并从第二个视图控制器访问此值。
NewGroupView *groupView = [self.storyboard instantiateViewControllerWithIdentifier:@"NewGroupViewNC"];
上面的行调用viewDidLoad
,这是您打印NSLog的地方,BOOL值仍然是"NO",因为它尚未设置。
现在你打电话:
groupView.isGroupViewMode = YES;
但是您无法在NSLog中看到它,因为之前已经调用了viewDidLoad
。
编辑:
正如@VyachaslavGerchicov所评论的那样
使用 -> 的初始情况也将起作用。
在 .h 文件中声明您的 BOOL 属性
@interface NewGroupView : UIViewController<UITableViewDelegate,UITableViewDataSource>
@property(nonatomic,assign) BOOL isGroupViewMode;
@end
然后在 .m 文件中合成它
@synthesize isGroupViewMode;
NewGroupView *groupView = (NewGroupView *)[self.storyboard instantiateViewControllerWithIdentifier:@"NewGroupViewNC"];
groupView.isGroupViewMode=YES;
[self presentViewController:groupView animated:YES completion:nil];
希望这对你有帮助。