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



我有两个视图控制器,分别说NewGroupViewGroupsTabView。我必须从我的第一个视图控制器设置第二个视图控制器的布尔值。这就是我从第一个视图控制器设置第二个视图控制器的值的方式。

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

希望这对你有帮助。

最新更新