ViewControllers之间的BOOL从YES变为NO?

时间:2012-05-25 01:56:05

标签: iphone ios ios5 xcode4

我只是不明白..这发生在这里和那里但我找不到一个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

更新:删除了我的发布通话,但问题仍然存在。

3 个答案:

答案 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类并在它所需的区域周围共享对该对象的访问。当然,还有其他方法可以做到这一点,但我觉得最简单。

相关问题