web-dev-qa-db-fra.com

Variable globale dans le programme Objective-C

Je veux stocker un nombre en tant que variable globale. Quelle syntaxe dois-je utiliser et comment d’autres parties de mon application peuvent-elles accéder à cette variable?

10
Shawn

Pour une variable globale standard (non persistante lorsque l'application est terminée et redémarrée), ajoutez ceci dans un fichier d'en-tête (* .h) de votre choix:

extern NSInteger MYGlobalVariable;

Ensuite, mettez ceci dans le fichier d'implémentation; (* .m, * .c, * .cpp) :

MYGlobalVariable = 0;  // Or any other default value.

C'est ainsi que vous faites une variable globale pain et beurre.

26
PeyloW

Vous voudrez probablement utiliser NSUserDefaults pour ceci:

De n'importe où dans votre code, vous pouvez définir une valeur pour une clé:

int userAge = 21; // Just an example

NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];

if (standardUserDefaults) {
    [standardUserDefaults setObject:[NSNumber numberWithInt:userAge] forKey:@"age"];
    [standardUserDefaults synchronize];
}

Et récupérez-le de n'importe quel autre endroit:

NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
NSNumber *age = nil;

if (standardUserDefaults) 
    age = [standardUserDefaults objectForKey:@"age"];

userAge = [age intValue]

Vous pouvez également définir une valeur initiale:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSDictionary *appDefaults = [NSDictionary
    dictionaryWithObject:[NSNumber numberWithInt:13] forKey:@"age"];

[defaults registerDefaults:appDefaults];

De plus, si vous avez des données complexes, vous pouvez créer une classe wrapper avec des setters et des getters.

20
Julien

Définissez la variable dans le fichier AppDelegate.h. Créer une propriété dans un fichier .h

@property (retain, nonatomic) NSString *str;

Puis synthétisez dans le fichier AppDelegate.m;

@synthesize str;

Définissez ensuite une variable dans votre fichier préfixe.pch de projet

#define DELEGATE ((AppDelegate*)[[UIApplication sharedApplication]delegate])

Utilisez la valeur n'importe où dans votre projet

AppDelegate *a = DELEGATE;
a.str = @"value";
NSLog(@"value of variable str : %@",a.str);
13
Raviraj Jadeja

Pour créer une variable visible par l’ensemble des fichiers dans Objective C

par exemple, vous voulez définir votre URL de base une fois et dans chaque classe, vous ajoutez des chaînes supplémentaires,

allez dans le fichier main.m, car c'est à cet endroit que toute l'application le verra . puis en dehors de la fonction principale, mettez votre URL de base

NSString *baseurl = @"staging.nabdanet.com";

int main(int argc, char * argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

et quand vous voulez accéder à ces cours, voici ce que vous ferez,

SomeClass.m

extern NSString *baseurl;

avec le même nom dans les deux;)

1
Abo3atef

Pour les vars persistants, utilisez NSUserDefaults. Ceci est écrit sur un fichier dans le sandbox de l'application . Pour les sessions (non persistantes), j'utilise une classe singleton avec une propriété NSMutableDictionary pour stocker les variables.

0
Ron

Pour déclarer une variable globale dans objective-C ou Swift, il vous suffit de la déclarer en dehors du champ de toute classe/interface.

Objectif c:

#import "headerFile1.h"
#import "headerFile2.h"

BOOL isTrue = true;
int x = 1;

@interface exampleInterface (){
...  
}
@end

@implementation exampleClass
...

isTrue= false; // can be used in the same way anyplace in your code
x=3; // anyplace means anyplace, even from other controllers
@end

Rapide:

import UIKit

var x=45;

class SomeClass {
... 
x=0; // This is also available from anyplace in your project
...
}
0
Loukan ElKadi