2010-03-25 7 views
0

J'ai deux paires (.m et .h) de fichiers. Dans la section interface, j'ai défini une variable globale BOOL. J'ai besoin d'avoir de la valeur dans une autre classe. Comment puis-je le faire? (Je ne peux pas faire d'une classe une sous-classe d'une autre).Comment accéder à la valeur d'une variable d'une classe, si la variable est définie dans une autre classe? (Objective-C)

Dans un fichier je

@interface TabBarRotation : UITabBarController { 
    BOOL portrait; 
} 

@end 



@implementation TabBarRotation 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
return YES; 
} 

- (void):(UIInterfaceOrientation) interfaceOrientation { 
if (interfaceOrientation == UIInterfaceOrientationPortrait||interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) { 
    portrait=YES; 
} 
else if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight) { 
    portrait=NO; 
} 
} 

@end 

Et je le @implementation d'un autre

- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event { 
if(portrait==YES) { 
    CalcPortraitViewController *CalcPortraitController; 
    CalcPortraitController = [[CalcPortraitViewController alloc] 
       initWithNibName:@"CalcPortraitView" bundle:nil]; 
    [email protected]"Калькулятор"; 
    CalcPortraitController.hidesBottomBarWhenPushed=YES;  
    [self.navigationController pushViewController:CalcPortraitController 
            animated:NO]; 
    [self.navigationController setNavigationBarHidden:YES animated:NO]; 
} 
else if (portrait==NO) { 
    CalcLandscapeViewController *CalcLandscapeController; 
    CalcLandscapeController = [[CalcLandscapeViewController alloc] 
           initWithNibName:@"CalcLandscapeView" bundle:nil]; 
    [email protected]"Калькулятор"; 
    CalcLandscapeController.hidesBottomBarWhenPushed=YES;  
    [self.navigationController pushViewController:CalcLandscapeController 
             animated:NO]; 
    [self.navigationController setNavigationBarHidden:YES animated:NO]; 
} 

} 
+0

Veuillez fournir un exemple de code pour clarifier votre question. – fbrereto

+0

En particulier, comment peut-il être à la fois une interface globale et dans la classe? –

Répondre

0

Si vous voulez vraiment une variable globale, vous ne voulez pas qu'il soit dans l'interface soit classe. Vous pouvez accéder à des variables globales comme vous le feriez en C. Utilisation:

extern BOOL myGlobal; 

pour déclarer la variable partout où vous devez l'utiliser (ou dans un en-tête commune pourrait être idéal). Ensuite, définissez-le exactement à un endroit:

BOOL myGlobal; 

Et vous devriez être défini.

Si vous voulez que ce soit une variable d'instance d'une classe, vous pouvez créer un accesseur comme vous le feriez normalement pour obtenir cette variable d'une autre classe.

+0

En fait, je ne suis pas très commun avec C. Dois-je mettre extern BOOL myGlobal; Dans main? – Knodel

+0

Si c'est un global il ne va pas dans n'importe quoi, c'est global - vous le déclarez aux côtés de tous les globals que vous avez - fonctions, variables, etc. Vous pourriez vouloir suivre un tutoriel C de base avant d'essayer de s'impliquer trop avec Objective-C. –

+0

Ok, je l'ai enfin compris comment il est fait, mais je reçois une erreur "_myGlobal", référencé à partir de: _myGlobal $ non_lazy_ptr dans myUIViewController1.o _myGlobal $ non_lazy_ptr dans myUIViewController2.o (peut-être que vous vouliez dire: _portrait $ non_lazy_ptr MyViewController2 est la classe, où la variable globale a été définie et myViewController1 est la classe où j'avais besoin de sa valeur. – Knodel

Questions connexes