コードでグローバル変数を使用したいと考えています。いくつかのインスタンスを使用する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 空)