Внешняя переменная не обновляется - PullRequest
0 голосов
/ 11 декабря 2010

Я пытаюсь установить значение логического значения. Я могу установить его успешно, однако в другом классе отраженные изменения не отображаются.

Вот пример:

File1:

@implementation ClassOne //UIViewController

extern BOOL theValue;

- (void)loadFile {
    theValue = YES;
}
...
@end

File2:

@implementation ClassTwo //UIViewController
BOOL theValue;
- (void)switchValueChanged {
    theValue = NO;
}


@end

Я изначально установил значение в классе один с начальным значением YES. Однако, когда я устанавливаю значение в ClassTwo равным NO и возвращаюсь обратно в ClassOne, значение по-прежнему равно YES.

Я немного застрял. Вы могли бы подумать, что это обновит. Но это не так.

Любая помощь приветствуется.

Ответы [ 3 ]

0 голосов
/ 11 декабря 2010

Похоже, вам лучше использовать шаблон проектирования Singleton ... http://www.galloway.me.uk/tutorials/singleton-classes/

0 голосов
/ 11 декабря 2010

Я понял это.Когда мое приложение запускается, оно устанавливает значение по умолчанию YES.Проблема заключалась в том, что я использовал метод viewWillAppear:animated для этого, и каждый раз, когда представление ClassTwo было отклонено, вызывался метод viewWillAppear:animated, и значение, которое было установлено , сбрасывалось.Я изменил метод на viewDidLoad и все работает отлично.

0 голосов
/ 11 декабря 2010

Самый простой способ выполнить то, что вам нужно, это объявить BOOL в файле интерфейса вашего appDelegate:

@interface AppDelegate : ....
{
  BOOL theValue;
}

@property BOOL theValue;

Затем из ClassOne или ClassTwo вы можете получить / установить переменную напрямую с помощью:

MyAppDelegate *appDelegate = (MyAppDelegate * )[[UIApplication sharedApplication] delegate];
appDelegate.theValue = YES;

ИЛИ

Если вы действительно хотите получить к нему доступ глобально , просто объявите переменную вне вашего @interface ... @end блока

BOOL theValue
@interface AppDelegate : ... 
{ 
...
}

И затем вы можете получить доступ к переменной theValue из любого места вашего кода, просто импортировав заголовочный файл AppDelegate:

#import "AppDelegate.h"
@implementation ClassOne : ....
...
theValue = YES;
...