2012-02-08 14 views
2

SQLiteデータベースの情報を保持するオブジェクトを持つCocoaプロジェクトがあります。 これまで情報はこのオブジェクトによってメモリに格納され、ユーザーインターフェイスで新しい情報の読み取りと書き込みに使用されます。 しかし、私は小さな問題に遭遇しました... 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 

あなたが一度オブジェクトを作成し、必要に応じてそれを維持し、各コントローラで、周りのオブジェクトを渡すことができますいずれか

#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

SecondClass.m。あるいは、シングルトンインスタンスを使用することもできます。私はシングルトンのインスタンスが読みやすいと言うでしょうが、それはアプリケーションに依存します

+0

シングルトンについての詳しい情報はどこにありますか? – Apollo

+0

ほとんどのプログラミングの本は、目的 - Cの実装のためのコンセプトを記述します、私は[これは最善の方法です]と思う(http://cocoasamurai.blogspot.com/2011/04/singletons-your-doing-them-wrong。 html) – wattson12

1

一つの解決策は、シングルトンをFirstClassにすることです。コード内の他の場所で[FirstClass sharedInstance](クラスメソッドに指定する名前にsharedInstanceを置き換えて)を呼び出して、このオブジェクトを使用することができます。しかし、並行性の問題については注意が必要です。

+0

シングルトンについての詳しい情報はどこにありますか? – Apollo

+0

@ wattson12答えは私にはかなり良いようです – ksol

関連する問題