2013-10-01 53 views
0

我有「classmap.m」和annotation.mi在「classmap.m」中有一個座標值,我需要指定一個值另一個班級annotation.m。如何聲明一個變量,可以在class1.m和class Bm中使用

ex: class1.m double start_long;

我想給在另一個類傳遞值(annotation.m)

annotation.m

annotation.longitude = Start_long;

我該怎麼做,請給出一些例子。

在此先感謝

+0

在Appdelegate中取變量並像AppDelegate * app = [[UIApplication sharedApplication] delegate]; appd.start_long = //在這裏指定一些值 – Tendulkar

+1

更好的是你應該使用Singleton概念。 –

+1

@NishantTyagi不,這是一個不好的解決方案。 –

回答

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 ; 
+2

應用程序代表不是傾銷的地方,因爲您不知道如何分享。它的角色是(它所說的)成爲UIApplication實例的代表。 –

+0

而不是創建新的單例類嘗試使用現有的單例類(Appdelegate) – Tendulkar

3

一個更好,更高效,有效和清潔的方法是使用Singleton模式。一個好的方法是保持AppDelegate更清潔並避免將全局變量保留在那裏。總是嘗試使用Singleton類和對象來保持全局變量。

+0

而不是創建新的單例類嘗試使用現有的單例類(Appdelegate) – Tendulkar

1

如果classmap.m和annotaion.m都是從NSObject繼承的,那麼它就是簡單的註釋:classmap。就可以訪問類映射的特性

類映射

@interface classmap : NSObject 

@property double longitude; 

@end 

#import "classmap.h" 

@implementation classmap 

@synthesize longitude; 


@end 

Annoataion

@interface annotation : classmap 

@property double start_long; 

@end 

#import "annotation.h" 

@implementation annotation 

@synthesize start_long; 


@end 

現在的分配可以很容易地在annotation.longitude = Start_long做你需要

的地方
+0

如果我正確理解您的答案,這是正確的方法。我會給代碼示例,這將極大地幫助OP。由於這是一個非常基本的問題。 – user523234

+0

你需要什麼樣的解釋@ user523234 – Vinodh

0

Singleton模式是一種武器應該謹慎使用,因爲它對使用它的所有東西都具有依賴性。

雖然使用單身人士將實現你現在想要的是訪問ClassMap中的一個屬性,但你爲未來的編碼問題設置了自己。

例如,當您有多個ClassMap實例時會發生什麼?

單身人士更適合做普適工作的事情。東西是工具。 e.g [NSUserDefaults standardUserDefaults][NSFileManager defaultManager]

一種不同的解決方案是使用Dependancy Injection其產生其中所需要的ClassMap對象的對象Annotation之間的直接連接。

簡單ClassMap聲明屬性

@property double start_long;

您通過ClassMap對象到Annotation對象當實例。

Annotation.h 

@interface Annotation:NSObject 

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

@end 

和...

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 
0

另一種方法是使用delegation.In您classmap.m聲明

@protocol classmapDelegate <NSObject> 

    -(void)didchangeCoordinateValue:(double)longitude; 

@end 

註釋應確認該協議,當曾經在類映射值改變,你可以得到事件錫註釋類。

相關問題