2013-03-14 85 views
2

我想知道如何在幾個視圖控制器之間共享NSDictionary對象,這些視圖控制器基本上都是我的應用程序中的選項卡。視圖控制器之間的對象共享

我嘗試使用協議,如在Java中,以便我可以強制轉換爲協議並訪問屬性。這似乎並不奏效。

而且我看了一下類似的問題在 How to share data globally among multiple view controllers

但我觀察到的appDelegate方法並不安全,並可能導致內存泄漏。

同樣,將A類注入到B類會產生同樣的問題。

那麼任何人都可以向我推薦任何我應該在我的代碼中學習或實現的方法嗎?

回答

1

如果你只想分享Dictionary,爲什麼不從類助手使用類方法。

+(NSDictionary *)shareMethod 
{ 
return dict; 
} 
1

您可以使用單獨的類共享數據
入住這Singleton class

MyManger.h

#import <foundation/Foundation.h> 

@interface MyManager : NSObject { 
NSMutableDictionary *_dict 
} 

@property (nonatomic, retain) NSMutableDictionary *dict; 

+ (id)sharedManager; 
@end 

MyManger.m

#import "MyManager.h" 

static MyManager *sharedMyManager = nil; 

@implementation MyManager 

@synthesize dict = _dict; 

#pragma mark Singleton Methods 

+ (id)sharedManager { 
@synchronized(self) { 
    if(sharedMyManager == nil) 
     sharedMyManager = [[super allocWithZone:NULL] init]; 
} 
return sharedMyManager; 
} 

- (id)init { 
    if (self = [super init]) { 
    dict = [[NSMutableDictionary alloc] init]; 
    } 
return self; 
} 

您可以訪問你的詞典與其他地方有這樣的

[MyManager sharedManager].dict 
0

我建議你不要在你的appDelegate實例中使用一個屬性。這種模式不會提高代碼的可重用性。

基本上你的共享NSDictionnary是你的模型。因此,如果您希望代碼遵循MVC設計parttern,則應該創建一個包含共享實例的類,該實例將您的NDDictionnary包含在公共屬性中。

這在this post

很好地解釋這種方式,您將訪問你的共享NSDictionnary這樣 :

NSDictionary* sharedDictionnary = [MyModel sharedInstance].sharedDictionary; 
1

我找到了一條出路。由於我想共享跨越一個字典,我在協議

- (void) setSingleHouse:(NSDictionary*) singleHouse; 

在我的每一個控制器中聲明的方法,我實現的方法,在適當的方式。因此我現在可以分享他們。

此外,我發現我早些時候以錯誤的方式投射,即(@protocol(協議名稱))。現在將其更改爲NSObject。

對不起。

相關問題