-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 的滚动视图。
  • 我在 ControllerA viewdidLoad 中将数据添加到 global.friend
  • 控制器 B、C、D 可以在 viewDidLoad 中正确访问全局,但是当我从任何这个控制器调用方法时,global.friend 是空的。
  • 控制器 B 调用控制器 E,但控制器 E 的 global.friend 也是空的。

我只在 global.friend 中的白色数据,从不删除任何对象。

为什么我会丢失数据?(global.friend 为空)

4

1 回答 1

0

As suggested by Josiah in one of the answers here there are better ways to do this. However, I like using Global Variables as well some times and I usually create an NSObject class and declare the global variables there.

To do so you need to create a new NSObject file. in the *.h file, above the interface you should declare your variable using 'extern'

extern NSMutableDictionary *SavedUsersDictionary;

in the *.m file you should your variable above the interface without the 'extern'

NSMutableDictionary *SavedUsersDictionary;

Then import the class wherever you need to use the variable. You can also set the variable as a class property and synthesize it.

Hope that helps.

于 2012-10-13T04:43:23.633 回答