0

我有“classmap.m”,annotation.mi 在“classmap.m”中有一个坐标值,我需要在另一个类 annotation.m 中分配一个值。

例如:class1.m 双 start_long;

我想在另一个类中传递值(annotation.m)

注释.m

annotation.longitude=Start_long;

我该怎么做,请举一些例子。

提前致谢

4

5 回答 5

3

一种更好、更高效、更有效和更清洁的方法是使用单例模式。一个好的方法是保持 AppDelegate 更干净,并避免在那里保留全局变量。始终尝试使用单例类和对象来保留全局变量。

于 2013-10-01T10:29:15.260 回答
1

如果 classmap.m 和 annotaion.m 都是从 NSObject 继承的,那么它就是简单的 annotation:classmap 。将允许访问类映射的属性

类映射

@interface classmap : NSObject

@property  double longitude;

@end

#import "classmap.h"

@implementation classmap

@synthesize longitude;


@end

注释

@interface annotation : classmap

@property  double start_long;

@end

#import "annotation.h"

@implementation annotation

@synthesize start_long;


@end

现在可以在 annotation.longitude=Start_long 您需要的地方轻松完成分配

于 2013-10-01T10:40:32.177 回答
0

另一种方法是使用委托。在您的 classmap.m 中声明

@protocol classmapDelegate <NSObject>

  -(void)didchangeCoordinateValue:(double)longitude;

@end 

annotation 应该确认这个协议,并且当 classmap 中的值发生更改时,您可以获得事件 tin Annotation 类。

于 2013-10-01T12:09:57.393 回答
0

Singleton模式是一种应该谨慎使用的武器,因为它对ClassMap使用它的所有对象都建立了具体的依赖关系。

虽然使用 Singleton 将实现您现在想要的,即访问其中的属性,ClassMap但您为将来的编码问题做好了准备。

例如,当您有多个ClassMap实例时会发生什么?

单身人士更适合做通用工作的事情。作为工具的东西。例如[NSUserDefaults standardUserDefaults][NSFileManager defaultManager]

另一种解决方案是使用依赖注入Annotation,它在需要对象的对象之间创建直接连接ClassMap

简而言之ClassMap,声明一个属性

@property double start_long;

ClassMap实例化时将对象传递给对象Annotation

Annotation.h

@interface Annotation:NSObject

-(instancetype)initWithClassMap:(ClassMap *)amap;

@end

还有……</p>

Annotation.m

@interface Annotation() {

    ClassMap *_map;

}

@end

@implementation Annotation

-(instancetype)initWithClassMap:(ClassMap *)amap {

self = [super init];
if(self) {
   _map = amap;
}
return self;

}

-(void)doSomething {

self.longitude = _map.start_long;

}

@end 
于 2013-10-01T11:07:39.740 回答
0

获取Appdelegate中的变量并在项目中的任何位置访问它。像访问它

赋值

AppDelegate *app = [[UIApplication sharedApplication]delegate];
appd.start_long = -17.002// assign some value here

读取值

AppDelegate *app = [[UIApplication sharedApplication]delegate];
double dVal  = appd.start_long ;
于 2013-10-01T10:24:12.093 回答