我需要創建一個可以由多個視圖控制器訪問的陣列實例。它將包含將顯示在表視圖中並由模塊化視圖創建並隨後顯示在表視圖中的對象。我無法弄清楚如何在主視圖控制器或AppDelegate類中爲它創建@property時訪問它。我需要製作一個可以由多個視圖控制器訪問的陣列實例
回答
你應該做一個單身主義者和推薦的方式做到這一點在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..
我會假設你可以使類數組從NSObject的繼承,然後把它傳遞給從那裏視圖控制器...
我試過這個,但是當我導入對象的.h時沒有任何東西顯示出來我輸入數組的名稱以發送消息給它。你能告訴我如何正確地定義它,並讓它的一個實例用於視圖控制器以及如何發送消息來添加對象到它?謝謝! – ahyattdev
您有2種方法可以做到這一點:
1.-在主類上進行實例化1,並將引用傳遞給每個視圖控制器。
2.-讓一個singleton類擁有這個數組在你的項目中使用。
首先創建一個類,像這樣
//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);
}
希望它能幫助!
謝謝!這幫助我解決了這個問題! – ahyattdev
很高興我能幫忙@ ahyatt645。但經過進一步研究,看起來Peter使用dispatch_once的解決方案是蘋果首選的方法。速度是原來的兩倍。 –
我要做的就是把我想共享的數據,在您的實例陣列,在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];
- 1. 可以訪問陣列,它從另一個視圖控制器
- 2. 每個UIView都需要一個控制器,還是一個控制器可以控制多個視圖?
- 3. 訪問的控制器的一個實例或在燼視圖
- 4. 從一個表視圖實例化多個視圖控制器
- 5. Xcode - 從多個視圖控制器訪問一個視圖控制器
- 6. 在另一個視圖控制器中訪問實例方法
- 7. 是否可以使用從單個模式視圖控制器退回到同一個源視圖控制器的多個實例中的一個實例?
- 8. 在頁面控制器中訪問多個視圖控制器
- 9. 從另一個視圖控制器訪問由一個視圖控制器創建的對象
- 10. 如何在另一個視圖控制器中控制實例
- 11. 在jmeter中從一個控制器訪問陣列到另一個控制器
- 12. 訪問控制器實例
- 13. ios5故事板:在一個容器視圖控制器中實例化多個視圖控制器
- 14. 訪問ViewBag的控制器,可在一個視圖
- 15. 我需要製作一個7個物體的陣列
- 16. 從另一個視圖控制器訪問ViewController的實例方法
- 17. 多個控制器從一個視圖
- 18. iPhone一個控制器,多個視圖
- 19. 未能與IDS訪問陣列中的另一個視圖控制器在iPhone
- 20. 我如何從一個子視圖控制器訪問父視圖控制器的視圖?
- 21. 可以呈現視圖控制器也是一個呈現視圖控制器?
- 22. Ember從另一個控制器訪問陣列控制器的內容
- 23. Cakephp 3.我需要一個無法訪問的控制器操作,通過URL
- 24. 我可以從另一個模態視圖控制器中推送一個模態視圖控制器嗎?
- 25. 如何我訪問一個視圖控制器擴展
- 26. 連接2個控制器並可以訪問第二個控制器中的第一個控制器屬性
- 27. 哪個視圖控制器正在實例化目標視圖控制器?
- 28. 如果partial是由另一個控制器的視圖呈現,是否可以在partial中訪問控制器的實例變量?
- 29. CakePHP是否可以在一個視圖中實例化多個控制器操作
- 30. 在另一個視圖控制器中打印另一個視圖控制器的陣列
單身+1。他們似乎需要更多的工作來建立,但卻很容易處理。 – bachonk