从第一个视图控制器分配的值不会保持不变

时间:2017-02-14 12:14:14

标签: ios objective-c

我有两个视图控制器说NewGroupViewGroupsTabView。我必须从我的第一个视图控制器设置第二个视图控制器的bool值。这是我从第一个视图控制器设置第二个视图控制器的值的方法。

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

在我的viewDidLoad方法中,我尝试将其打印如下,

- (void)viewDidLoad {
    [super viewDidLoad];

    NSLog(isGroupViewMode ? @"Yes" : @"No");
}

但问题是它总是打印NO虽然我已将其设置为YES。 为什么指定的值不会持续存在?

3 个答案:

答案 0 :(得分:2)

使用代码

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中,并从第二个视图控制器访问该值。

答案 1 :(得分:2)

NewGroupView *groupView = [self.storyboard instantiateViewControllerWithIdentifier:@"NewGroupViewNC"];

上面的行调用viewDidLoad,这是你打印NSLog的地方,BOOL值仍然是&#34; NO&#34; ,因为尚未确定。

现在你打电话:

groupView.isGroupViewMode = YES;

但是你不能在你的NSLog中看到它,因为之前已经调用了viewDidLoad

修改

由@ VyachaslavGerchicov

评论
  

使用 - &gt;的初始案例也会奏效。

答案 2 :(得分:1)

在.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];

&安培;希望这会对你有所帮助。