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
シングルトンについての詳しい情報はどこにありますか? – Apollo
ほとんどのプログラミングの本は、目的 - Cの実装のためのコンセプトを記述します、私は[これは最善の方法です]と思う(http://cocoasamurai.blogspot.com/2011/04/singletons-your-doing-them-wrong。 html) – wattson12