2011-03-20 41 views
0

我一直在努力通过一些Objective-C/iOS开发书籍,并且我碰到了一个绊脚石。我觉得我在这里错过了一些愚蠢的东西,所以我相信你们可以提供帮助,因为你们都非常聪明:-)。我在哪里实例化我的课程,以便在我的应用程序中访问它?

我有一个非常简单的应用程序,它由1个按钮和1个标签组成。按下按钮会在标签中显示一条消息。我创建了一个包含创建所述消息的方法的类。这是问题:

#import "classTestViewController.h" 

@implementation classTestViewController 
@synthesize myLabel; 

- (void)viewDidLoad 
{ 


} 

-(IBAction) pressGo:(id)sender{ 

    MyClass * classTester = [[MyClass alloc] init]; 
    classTester.count = 15; 
    NSString *newText = [classTester makeString ]; 
    myLabel.text = newText; 
} 
- (void)dealloc 
{ 
    [classTester release]; 
    [myLabel release]; 
    [super dealloc]; 
} 

这个应用程序的输出,在我的标签,是“Yay 15”。所以你可以看到这个问题,唯一可以实现这个功能的方法是在“pressGo”方法中实例化这个类。这是不可取的,因为另一种方法无法访问或更改类变量计数。另外我得到一个警告,即classTester的本地声明隐藏了实例变量。如果我将类实例化移动到viewDidLoad方法(看起来正确),其他方法不能再访问它。

#进口 “classTestViewController.h”

@implementation classTestViewController 
@synthesize myLabel; 

- (void)viewDidLoad 
{ 
    MyClass * classTester = [[MyClass alloc] init]; 


} 

-(IBAction) pressGo:(id)sender{ 

    classTester.count = 15; 
    NSString *newText = [classTester makeString ]; 
    myLabel.text = newText; 
} 
- (void)dealloc 
{ 
    [classTester release]; 
    [myLabel release]; 
    [super dealloc]; 
} 

的输出是错了。如果我尝试访问一个变量,例如classTester.count,即使设置了它,我也会得到一个0值。我也在这里得到覆盖警告。

所以我的问题是,我怎样才能访问整个我的应用程序的类实例,而不只是在一种方法?我正在使用基于视图的应用程序。

+0

如果你正在寻找一个** singleton **,你需要Gallagher的文件,每个人都用单身。 http://cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html。在这里获取实际的文件http://projectswithlove.com/projects/SynthesizeSingleton.h.zip。如果你是一个新的程序员,不要过度使用单身人士,你需要知道你在做什么。阅读更多关于他们。 – Fattie 2011-03-20 09:16:57

回答

3

与您的接口文件中声明classTester

@class MyClass 
@interface classTestViewController : UIViewController 
{ 
    MyClass *classTester; 
} 
// Any other custom stuff here 
@end 

然后在您的viewDidLoad方法中将其实例化为:

classTester = [[MyClass alloc] init]; 

而且你应该能够从本课程中的任何方法访问ivar。如果您希望您的整个应用都能访问它,@Waqas链接将指引您朝着正确的方向发展。

+0

请注意,在UIViewController的使用期间可以多次调用'-viewDidLoad'。这是创建实例变量的适当位置,只有在视图可见时才需要它(因此它应该在'-viewDidUnload'中释放),但是如果您希望此MyClass实例在此'classTestViewController'时继续存储数据的视图是不可见的,那么你可能想在控制器的指定初始化器中初始化'classTester'。 – Jonah 2011-03-20 08:24:17

相关问题