2012-02-08 83 views
2

我有一個Cocoa項目,其中包含一個保存來自SQLite數據庫信息的對象。 現在信息被這個對象存儲在內存中,並在用戶界面中用於讀取和寫入新信息。 但是現在我遇到了一個小問題......我決定創建一個新的控制器類來處理NSTableView的動作,並且我想訪問其他地方聲明的同一個數據庫對象。 哪個是訪問這些信息的最佳選擇?我希望避免在內存中多次加載信息,並且避免在全局變量中使用純C/C++代碼。多類中的變量訪問

最好通過查看代碼來理解我的觀點。 我自然也接受其他解決方案。

我的代碼的想法目前是這樣的:

FirstClass.h

#import <Foundation/Foundation.h> 
#import "DatabaseModel.h" 

@interface FirstClass : NSObject { 

    IBOutlet NSScrollView *informationListTable; 
    NSMutableArray *informationList; 

} 
@end 

FirstClass.m

#import "FirstClass.h" 

@implementation FirstClass 

- (void)awakeFromNib{ 
    DatabaseModel *list = [[DatabaseModel alloc] init]; 
    informationList = [[NSMutableArray alloc] initWithArray:[list loadList]]; 
    [list release]; 
    [machinesListTable reloadData]; 
} 

SecondClass.h

#import <Foundation/Foundation.h> 

@interface SecondClass : NSObject { 
    IBOutlet NSTextField *labelName; 
    NSString *name; 
} 

- (IBAction)showName:(id)sender; 

@end 

SecondClass.m

#import "FirstClass.h" 
#import "SecondClass.h" 
@implementation SecondClass 

- (IBAction)showName:(id)sender{ 
/* 
Here name must get something like: 

[[FirstClass.informationList objectAtIndex:3] name] 

Here labelName must display name. 
*/ 

} 

@end 

回答

2

您可以一次創建對象,然後通過周圍的物體,每個控制器放置根據需要對其進行。或者你可以使用單例實例。我會說singleton實例更容易閱讀,但它取決於應用程序

+0

我在哪裏可以找到關於單身人士的更多信息? – Apollo 2012-02-08 15:02:27

+0

大多數編程書籍都會描述這個概念,在objective-c上實現,我認爲[這是最好的方法](http://cocoasamurai.blogspot.com/2011/04/singletons-your-doing-them-wrong。 html) – wattson12 2012-02-08 15:04:40

1

一種解決方案是使FirstClass單身。然後,在您的代碼中的任何其他位置,可以撥打[FirstClass sharedInstance](用您將給類方法的名稱替換sharedInstance)並使用此對象。儘管如此,你必須小心併發問題。

+0

我在哪裏可以找到關於單身人士的更多信息? – Apollo 2012-02-08 15:02:41

+0

@ wattson12回答對我來說似乎很不錯 – ksol 2012-02-08 15:25:05