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