-1

コードでグローバル変数を使用したいと考えています。いくつかのインスタンスを使用するViewControllerがあるため、グローバルを使用する方が簡単で、コントローラー間でインスタンスを渡すことができます。

したがって、AppDelegate でグローバルを作成します。

AppDelegate.h

@interface AppDelegate : UIResponder <UIApplicationDelegate>{
    //Global Variables
    NSInteger userID;
    NSMutableArray *friends;
}
@property (assign, nonatomic) NSInteger userID;
@property (strong, nonatomic) NSMutableArray *friends;

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    ...
    self.friends = [[NSMutableArray alloc] init];
    return YES;

}

そして、ViewControllerN.h にこのコードを追加して、任意のコントローラーでグローバルにアクセスします。

#import "AppDelegate.h"
#define global \ ((AppDelegate *)[UIApplication sharedApplication].delegate)

したがって、ViewControllerN.m では、グローバルにアクセスできます。次に例を示します。

[global.friends addObject:@"Henry"];

それは完全に機能します。しかし、どこかで、グローバルからのデータが失われています。

PageControllerA (ControllerA) でアプリを起動します

  • コントローラー A には、コントローラー B、C、および D を含む scrollView があります。
  • ControllerA viewdidLoad の global.friend にデータを追加します
  • コントローラー B、C、D は viewDidLoad でグローバルに正しくアクセスできますが、このコントローラーのいずれかからメソッドを呼び出すと、global.friend が空になります。
  • コントローラ B はコントローラ E を呼び出しますが、コントローラ E の global.friend も空です。

global.friend のホワイト データのみを使用し、オブジェクトを削除することはありません。

データが失われるのはなぜですか? (global.friend 空)

4

1 に答える 1

0

ここでの回答の1つでジョサイアが示唆しているように、これを行うためのより良い方法があります。しかし、私はグローバル変数も時々使用するのが好きで、通常は NSObject クラスを作成し、そこでグローバル変数を宣言します。

そのためには、新しい NSObject ファイルを作成する必要があります。*.h ファイルのインターフェイスの上で、 「extern」を使用して変数を宣言する必要があります。

extern NSMutableDictionary *SavedUsersDictionary;

*.m ファイルでは、「extern」なしでインターフェイスの上に変数を指定する必要があります

NSMutableDictionary *SavedUsersDictionary;

次に、変数を使用する必要がある場所にクラスをインポートします。変数をクラス プロパティとして設定し、合成することもできます。

それが役立つことを願っています。

于 2012-10-13T04:43:23.633 に答える