Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 通过不同的控制器使用外部变量_Objective C_Xcode_Mkmapview_Global Variables_Viewcontroller - Fatal编程技术网

Objective c 通过不同的控制器使用外部变量

Objective c 通过不同的控制器使用外部变量,objective-c,xcode,mkmapview,global-variables,viewcontroller,Objective C,Xcode,Mkmapview,Global Variables,Viewcontroller,我正在尝试制作一个应用程序(使用故事板),我想用事件填充它。 在我的MapViewController.h中,我有: #imports extern NSMutableArray* events; @interface MapViewController : etc, etc{ .. } 因此,我想要的是能够将这个.h文件导入,例如,我的AppDelegate.m文件,并在appdidfishload中执行以下操作: Event *event = [[Event alloc] init]

我正在尝试制作一个应用程序(使用故事板),我想用事件填充它。 在我的MapViewController.h中,我有:

#imports

extern NSMutableArray* events;

@interface MapViewController : etc, etc{
..
}
因此,我想要的是能够将这个.h文件导入,例如,我的AppDelegate.m文件,并在appdidfishload中执行以下操作:

Event *event =  [[Event alloc] init];
event.blabla = blabla;
...
[events addObject:event];
同时,在我的MapViewController.m中,我需要一个函数,将这些事件添加到我的MKMapView(它在我的MapViewController中定义,称为worldView)中

因此:


所以。。是 啊请帮助^ ^

永远不要将全局变量用于这样的目的,它们是邪恶的。


最好使用基于单例(即所谓的设计模式)的方法创建类似“管理器”的东西(例如EventManager类)在独立控制器之间共享数据。

有更好的模式,如yan.kun提到的单例模式,但您尝试执行的方式是将这一行放在AppDelegate.m中,而不是在您的
@实现之外:

NSMutableArray* events;
这为它提供了一个全局空间,因此不会出现链接器错误。然后,您需要在使用它的任何类需要它之前初始化events数组。稳健地解决这个初始化问题是其他模式更好的原因之一。在您的情况下,您可能可以在AppDelegate完成启动方法的早期完成此操作


注意:如果必须使用全局变量,请不要将其命名为“事件”,因为名称冲突的可能性非常高。

您能详细说明一下我将如何使用它吗?首先,您应该阅读关于singleton:的内容,然后在Objective-C中如何实现它:
Undefined symbols for architecture armv7:
"_events", referenced from:
-[AppDelegate applicationdidFini... ]
-[MapViewController setEVents] in ...
..
clang: error: linker command failed with exit code 1 (use -v to see invocation)
NSMutableArray* events;