Переменная, потерянная после увольнения modalViewController - PullRequest
0 голосов
/ 23 марта 2012

Я использую Reachability в своем приложении для iPad и обнаружил некоторые проблемы при использовании 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];
}

Когда я звоню [self getOnline] в mainViewController, он возвращает 1 (потому что я я онлайн).

Но: когда я вызываю [main getOnline] внутри modalViewController, он возвращает 0 в журнале.

Кто-нибудь знает почему?!

Я также пытался поместить переменную online как @property в modalViewController, чтобы обрабатывать , если онлайн-материал в модальном режиме. Но когда я присваиваю ему значение (из основного) и записываю его в модальный режим, он всегда возвращает (NULL).

Надеюсь, вы можете мне помочь! С наилучшими пожеланиями, Джулиан

1 Ответ

1 голос
/ 23 марта 2012

Краткий ответ: потому что они используют различные экземпляры переменной online.

Длинный ответ: вам нужно только объявить BOOL online в заголовке, а не определить это. Определение должно происходить в файле .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; Я уверен, что это не , что вы хотели.

...