Objective c 通过不同的控制器使用外部变量
我正在尝试制作一个应用程序(使用故事板),我想用事件填充它。 在我的MapViewController.h中,我有: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]
#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;