我只是不明白..这在这里和那里发生,但是我找不到黑麦或原因。
香港专业教育学院搜索了一段时间没有运气..也许你们可以告诉我我在做什么错?
我正在从ViewController_B在ViewController_A中设置BOOL。
逐步执行代码,我看到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
更新:删除了我的发布调用,但仍然是同样的问题。
最佳答案
看来您在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
原谅任何错别字/错误,我实际上并没有尝试过运行。