如何在Objective-C中生成和访问全局变量
我通过一个搜索栏在地图上放了一个大头针,我检索了它的坐标,并将它们保存在我的纬度和我的长度的两倍中。 这在以下代码片段中完成: 类别1.h如何在Objective-C中生成和访问全局变量,objective-c,global-variables,coordinates,Objective C,Global Variables,Coordinates,我通过一个搜索栏在地图上放了一个大头针,我检索了它的坐标,并将它们保存在我的纬度和我的长度的两倍中。 这在以下代码片段中完成: 类别1.h @interface Location : UIViewController <UISearchBarDelegate, MKMapViewDelegate> @property (nonatomic, readwrite) double myLatitude; @property (nonatomic, readwrite) double m
@interface Location : UIViewController <UISearchBarDelegate, MKMapViewDelegate>
@property (nonatomic, readwrite) double myLatitude;
@property (nonatomic, readwrite) double myLongitude;
现在,我想在另一个2类中使用这两个双精度(myLatitude和myLongitude),换句话说,我需要这两个双精度是全局的,我想,我怎样才能使它们全局化,然后如何在2类中调用它们?任何代码都将不胜感激 最简单的方法可能是使用 您可以创建一个新的singleton类,然后从应用程序中的任何位置访问该类。因此,您可以创建
CoordinateManager
或其他东西,然后使用它来处理您希望全局的位置坐标
例如。
CoordinateManager.h
@interface CoordinateManager : NSObject
+ (CoordinateManager *)sharedManager;
@property float latitiude;
@property float longitude;
@end
和CoordinateManager.m
@implementation CoordinateManager
@synthesize latitiude;
@synthesize longitude;
static CoordinateManager *manager = nil;
+ (CoordinateManager *)sharedManager
{
if (manager) {
return manager;
}
else {
@synchronized(self) {
if (!manager) {
manager = [[CoordinateManager alloc] init];
}
return manager;
}
}
}
@end
然后将属性设置为:
[[CoordinateManager sharedManager]设置纬度:1.067594]代码>
然后,只要您导入CoordinateManager.h
好的,就可以从应用程序中的任何位置访问它,所以我已经设置了[[CoordinateManager sharedManager]SetLatitude:newLocation.latitude];在我的搜索栏方法中。我如何从其他地方访问它?不要为此用例创建单例。只需将Location
对象的一个实例传递给class2
@rmaddy,这就是我最初尝试的,我在所有方法之外定义了坐标,以便访问它们,然后创建了一个Location*object=[Location alloc];在第二节课上,但是object.latitude不会给我任何回报,这就是问题所在。不要在第二类中创建位置
对象。创建获取坐标的位置
对象,然后将特定的位置
对象传递给第二类。@rmaddy使用单例作为全局“存储”,然后在应用程序中的任何位置使用它,而不是传递变量,这难道不容易吗?在开发应用程序时,您可以向singleton添加有用的功能@dave您将#在class2中导入“CoordinateManager.h”
,然后调用float lat=[[CoordinateManager sharedManager]latitude]代码>
@implementation CoordinateManager
@synthesize latitiude;
@synthesize longitude;
static CoordinateManager *manager = nil;
+ (CoordinateManager *)sharedManager
{
if (manager) {
return manager;
}
else {
@synchronized(self) {
if (!manager) {
manager = [[CoordinateManager alloc] init];
}
return manager;
}
}
}
@end