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

+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

Смежные вопросы