web-dev-qa-db-ja.com

Objective-Cプログラムのグローバル変数

数値をグローバル変数として格納したい。使用する構文と、アプリケーションの他の部分からその変数にアクセスする方法を教えてください。

10
Shawn

標準のグローバル変数(アプリが終了して再起動したときに永続的ではない)の場合、これをヘッダーファイルに追加します(*。h)選択:

extern NSInteger MYGlobalVariable;

次に、これを実装ファイルに入れます。 (*。m、* .c、* .cpp)

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

これがパンとバターのグローバル変数を実行する方法です。

26
PeyloW

おそらくこれにNSUserDefaultsを使いたいでしょう:

コードのどこからでも、キーの値を設定できます。

int userAge = 21; // Just an example

NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];

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

そして、他の場所からそれを取り戻します:

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

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

userAge = [age intValue]

初期値を設定することもできます:

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

[defaults registerDefaults:appDefaults];

また、複雑なデータがある場合は、セッターとゲッターを持つラッパークラスを作成することもできます。

20
Julien

変数をAppDelegate.hファイルに定義します。 .hファイルにプロパティを作成する

@property (retain, nonatomic) NSString *str;

次に、AppDelegate.mファイルで合成します。

@synthesize str;

後でプロジェクトのprefix.pchファイルに変数を定義します

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

プロジェクトのどこにでも値を使用する

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

Objective Cでファイル全体から見える変数を作成するには

たとえば、ベースURLを一度設定し、各クラスに追加の文字列を追加したい場合、

main.mファイルに移動します。これは、アプリ全体で表示される場所です。次にメイン関数の外に、ベースURLを入れます

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

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

これらのクラスにアクセスしたいときは、これだけです。

SomeClass.m

extern NSString *baseurl;

両方で同じ名前;)

1
Abo3atef

永続的な変数の場合は、NSUserDefaultsを使用します。これは、アプリのサンドボックス内のファイルに書き込まれます。セッション変数(非永続)の場合、変数を格納するためにNSMutableDictionaryプロパティを持つシングルトンクラスを使用します。

0
Ron

Objective-CまたはSwiftでグローバル変数を宣言するには、クラス/インターフェイスのスコープ外で宣言するだけです。

Objective-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

Swift:

import UIKit

var x=45;

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