2010-12-11 26 views
0

J'essaie de définir la valeur d'un booléen. Je peux le configurer avec succès, cependant, dans une autre classe, les changements reflétés n'apparaissent pas.Variable externe non mise à jour

Voici un exemple:

Fichier1:

@implementation ClassOne //UIViewController 

extern BOOL theValue; 

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

Fichier2:

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


@end 

Je mis initally la valeur en classe un, avec la valeur initiale de OUI. Cependant, lorsque je mets la valeur dans ClassTwo à NO et retourne à ClassOne, la valeur est toujours YES.

Je suis un peu coincé. Vous penseriez que cela serait mis à jour. Mais ce n'est pas le cas.

Toute aide appréciée.

+0

Peut-être afficher un peu plus de code et où il est exactement situé, c'est-à-dire quelles méthodes etc. – Eiko

Répondre

0

Je l'ai compris. Lorsque mon application se lance, elle définit par défaut la Valeur à YES. Le problème était que j'utilisais une méthode viewWillAppear:animated pour cela et chaque fois que la vue de ClassTwo était ignorée, la méthode viewWillAppear:animated était appelée et la valeur était définie avait été réinitialisée. J'ai changé la méthode à viewDidLoad et tout fonctionne bien.

0

Meilleure façon d'accomplir ce que vous recherchez est de déclarer le BOOL dans votre fichier d'interface de appDelegate:

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

@property BOOL theValue; 

Puis, à partir ClassOne ou ClassTwo vous pouvez obtenir/définir la variable directement par:

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

OU

Si vous voulez vraiment y accéder globalement, simplement déclarer la variable extérieur votre @interface ... @end bloc

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

Et vous pouvez accéder à la theValue variable à partir de n'importe où dans votre code en important simplement le fichier d'en-tête de AppDelegate:

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

Il utilise déjà extern pour une variable globale ... du moins c'est ce que suggère le code. – Eiko

+0

@Eiko vous avez raison, j'ai raté ce peu. Edité ma réponse en conséquence. – Rog

+0

J'ai essayé les deux ... Ni l'un ni l'autre ne semblaient fonctionner ... –