我只是不明白..这发生在这里和那里但我找不到一个ryme或理由。 我搜索了一段时间没有运气..也许你们可以告诉我我做错了什么?
我在ViewController_A中设置一个BOOL来自ViewController_B。 单步执行代码我看到BOOL更改为YES,但是当我被发送回VC_A时它返回NO
更新:这一切都在主线上。
这是我的代码。
ViewController_A.h
BOOL shouldLogin;
@property(nonatomic,assign)BOOL shouldLogin;
ViewController_A.m
@synthesize shouldLogin;
//in viewWillAppear of ViewController_A
if (shouldLogin == YES) {
//do something - im trying to get in here but I cant because the BOOL is NO when I come back to this view
}
以下是我在ViewController_B中设置BOOL的方法
ViewController_A * vc = [[ViewController_A alloc]init];
vc.shouldLogin = YES;
//stepping through the code and looking at the value, shouldLogin shows YES
[self dismissModalViewControllerAnimated:YES]; // this drops down VC_B which will show VC_A
//now VC_A just came into view and the BOOL is now NO which makes the compiler skip over my IF statement
更新:删除了我的发布通话,但问题仍然存在。
答案 0 :(得分:2)
ViewController_B
中的代码看起来正在创建一个全新的ViewController_A
,设置shouldLogin
标志,然后立即销毁ViewController_A
的实例化。我怀疑这是你打算做的。
我假设您要在先前实例化的shouldLogin
上设置ViewController_A
标志。您需要将指针ViewController_A
传递给ViewController_B
,然后使用此指针在ViewController_B
中设置标记。您可以使用init
上的自定义ViewController_B
方法执行此操作,该方法指向ViewController_A
并将其存储以供ViewController_B
使用。
或者,您可以在ViewController_B
上创建一个属性,该属性可以存储指向ViewController_A
的指针,并在创建ViewController_A
后获取ViewController_B
来设置此属性。类似的东西:
@interface ViewController_B : UIViewController
@property (nonatomic,retain) ViewController_A *originalViewController;
@end
@implementation ViewController_B
@synthesize originalViewController;
- (void)someMethod {
originalViewController.shouldLogin = YES;
[self dismissModalViewControllerAnimated:YES];
}
@end
@implementation ViewController_A
-(void)someOtherMethod {
ViewController_B *vcB = [[ViewControllerB alloc] init];
vcB.originalViewController = self;
// do something with vcB
}
@end
原谅任何错别字/错误,我实际上并没有尝试过这个。
答案 1 :(得分:1)
我假设您在推动视图控制器B之前存在视图控制器A.在这种情况下,您需要引用回原始视图控制器,而不仅仅是创建一个新视图控制器。您没有在此代码中的任何位置触摸原始视图控制器,因此它完全没有变化。
答案 2 :(得分:1)
ViewController_A是一个类,而不是一个对象。 shouldLogin只能由ViewController_A类的对象访问。
之前显示的ViewController_A的对象(或实例)与ViewController_B代码中的实例不同。您显示的代码创建一个全新的ViewController_A对象,在该对象上将布尔值设置为YES,然后立即销毁该对象。它在您呈现ViewController_B实例之前从未改变ViewController_A实例中的任何内容,因此当您返回显示原始ViewController_A时,它就像它一样 - 完成将shouldLogin设置为NO。
由于shouldLogin看起来像一个变量多视图控制器需要访问,我会在另一个类中完全设置它(两个视图控制器都可以访问)。对于像这样的变量,我倾向于创建一个Singleton类并在它所需的区域周围共享对该对象的访问。当然,还有其他方法可以做到这一点,但我觉得最简单。