解雇modalViewController后变量丢失

时间:2012-03-23 03:07:14

标签: ipad properties modalviewcontroller

我在iPad应用中使用了Reachability,并在使用modalViewControllers时发现了一些问题。

在我的mainViewController中,我有一个BOOL变量,用于确定我在线或不在线的天气。这是我的代码:

// mainViewController.h
BOOL online;

// mainViewController.m
- (void)reachabilityChanged:(NSNotification *)note
{
    if([[note object] isReachable]) {
        online = YES;
    }
    else {
        online = NO;
    }
}
- (void)getOnline
{
    NSLog(@"%d", online);
}

// modalViewController.m
#import "mainViewController.h"

- (IBAction)dismissMe
{
    mainViewController *main = [[mainViewController alloc] init];
    [main getOnline];
    [self dismissModalViewControllerAnimated:YES];
}

当我在mainViewController中调用[self getOnline]时,它返回1(因为我 am 在线)。

但是:当我在modalViewController中调用[main getOnline]时,它会在日志中返回0。

有人知道为什么吗?!

我还尝试将online变量作为@property放入modalViewController中,以处理模式中的 if online stuff 。但是当我为它(从主要)分配一个值,并在模态中记录它时,它总是返回(NULL)

希望,你能帮助我!最诚挚的问候,朱利安

1 个答案:

答案 0 :(得分:1)

简短回答:因为他们使用 online变量的个实例。

答案很长:你只应在标题中声明 BOOL online,而不是 define 。定义应该在.m文件中进行,如下所示:

在mainViewController.h中:

extern BOOL online; // Declare the variable

在mainViewController.m中:

BOOL online; // Define the variable

// the rest of your code

编写代码的方式,为包含BOOL online的每个.m文件创建单独的mainViewController.h;我确信这是你的意图。