0

我只是不明白..这种情况到处发生,但我找不到任何理由或理由。我已经搜索了一段时间没有运气..也许你们可以告诉我我做错了什么?

我在 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

更新:删除了我的发布调用,但仍然是同样的问题。

4

3 回答 3

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

原谅任何错别字/错误,我实际上并没有尝试运行它。

于 2012-05-25T02:01:37.547 回答
1

我假设您的视图控制器 A 在您推送视图控制器 B 之前已经存在。在这种情况下,您需要引用回原始视图控制器,而不仅仅是创建一个新视图控制器。您没有在此代码中的任何地方触摸原始视图控制器,因此它不会改变是完全合理的。

于 2012-05-25T02:01:46.613 回答
1

ViewController_A 是一个类,而不是一个对象。shouldLogin 只能由 ViewController_A 类的对象访问。

您之前显示的 ViewController_A 的对象(或实例)与您的 ViewController_B 代码中的实例不同。您显示的代码创建了一个全新的 ViewController_A 对象,将该对象的布尔值设置为 YES,然后立即销毁该对象。它从未改变您在呈现 ViewController_B 实例之前拥有的 ViewController_A 实例中的任何内容,因此当您返回显示原始 ViewController_A 时,它与原来的完全一样——将 shouldLogin 设置为 NO。

由于 shouldLogin 似乎是多个视图控制器需要访问的变量,因此我会将其完全设置在另一个类中(两个视图控制器都可以访问)。对于诸如此类的变量,我倾向于创建一个 Singleton 类并在需要的区域周围共享对该对象的访问。当然,还有其他方法可以做到这一点,但我发现这是最简单的。

于 2012-05-25T02:10:45.883 回答