2012-02-08 4 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