2013-10-24 54 views

回答

2

你應該做一個單身主義者和推薦的方式做到這一點在Objective-C是創建一個類,並補充說,看起來像一個方法:

+ (YourClass *)sharedYourClass 
{ 
    static dispatch_once_t onceToken; 
    static YourClass  *sharedInstance; 

    dispatch_once(&onceToken, ^{ 
     sharedInstance = [[self alloc] init]; 
    }); 

    return sharedInstance; 
} 

把數組作爲你的類屬性。

//YourClass.h 
@interface YourClass : NSObject 

@property(nonatomic, strong)NSArray *yourArray; 

+(YourClass *)sharedYourClass; 

@end 

而且在你想通過導入YourClass.h使用你的單身啓動,然後用每類是這樣的:

NSArray *arr = [YourClass sharedYourClass].yourArray; 
[YourArray sharedYourClass].yourArray = [[NSArray alloc] init]; 
etc.. 
+0

單身+1。他們似乎需要更多的工作來建立,但卻很容易處理。 – bachonk

0

我會假設你可以使類數組從NSObject的繼承,然後把它傳遞給從那裏視圖控制器...

+0

我試過這個,但是當我導入對象的.h時沒有任何東西顯示出來我輸入數組的名稱以發送消息給它。你能告訴我如何正確地定義它,並讓它的一個實例用於視圖控制器以及如何發送消息來添加對象到它?謝謝! – ahyattdev

0

您有2種方法可以做到這一點:

1.-在主類上進行實例化1,並將引用傳遞給每個視圖控制器。

2.-讓一個singleton類擁有這個數組在你的項目中使用。

0

首先創建一個類,像這樣

//GlobalDataClass.h 
@interface GlobalDataClass : NSObject 
@property(nonatomic,retain)NSArray *myArray; 
+(GlobalDataClass*)getInstance; 
@end 


#import "GlobalDataClass.h" 
//GlobalDataClass.m 
@implementation GlobalDataClass 
@synthesize myArray; 

static GlobalDataClass *instance =nil; 

+(GlobalDataClass *)getInstance 
{ 
    @synchronized(self) 
    { 
     if(instance==nil) 
     { 
      instance = [GlobalDataClass new]; 
     } 
    } 

    return instance; 
} 
@end 

然後你可以使用它在你的viewControllers這樣的:

-(void)viewDidLoad{ 
    [super viewDidLoad]; 
    self.dataObj = [GlobalDataClass getInstance]; 
    NSLog(@"%@",self.dataObj.myArray); 
} 

希望它能幫助!

+0

謝謝!這幫助我解決了這個問題! – ahyattdev

+0

很高興我能幫忙@ ahyatt645。但經過進一步研究,看起來Peter使用dispatch_once的解決方案是蘋果首選的方法。速度是原來的兩倍。 –

1

我要做的就是把我想共享的數據,在您的實例陣列,在AppDelegate中。然後我定義一個應用程序委託符合的協議。這讓我可以隨時隨地訪問數據。例如,假設我有一個數組我想無處不在:

首先定義一個協議:

@protocol ApplicationState<NSObject> 

    @property(nonatomic, strong) NSArray* data; 

    @end 

然後,讓你的應用程序委託符合它:

@interface AppDelegate : UIResponder <UIApplicationDelegate, ApplicationState> 

    @property (strong, nonatomic) UIWindow *window; 

    @property(nonatomic, strong) NSArray* data; 

    @end 

然後讀取和寫入此共享對象很簡單:

id<ApplicationState> appState = (id<ApplicationState>) [UIApplication sharedApplication].delegate; 
    appState.data = [[NSArray alloc] init]; 
相關問題