无法从另一个类访问类实例

时间:2012-06-21 12:43:04

标签: iphone objective-c xcode class instance

在我的AppDelegate中,我已经导入了我已创建和属性的类的标题,并将其实例(在AppDelegate中)同步。现在,我正在尝试从其他两个视图访问此实例中的方法和变量。我对objective-c相对较新,但到目前为止,我已经了解到如果我这样做:

AppDelegate *appdelegate = [AppDelegate new];

我将从AppDelegate中的类中获取一个新的实例,所以如果我从一个视图设置一个变量,我就无法从另一个视图中访问它。我已经读过,如果我这样做的话:

AppDelegate *ap = (AppDelegate *)[[UIApplication sharedApplication] delegate];

它允许我访问现有实例。但它不起作用。

我试图这样做的方式完全错了吗?非常感谢你的帮助!

更新:

当我在AppDelegate中执行此操作时:

myClass.string = @"test";
NSLog(@"appDelegate: %@", myClass.string);

我明白了:

appDelegate: (null)

UPDATE2:

我写了@class AppDelegate;在viewController中的@import行下面,但我仍然无法访问myClass。一个主要问题,可能是因为这不能从视图中运行的原因,我甚至无法从AppDelegate访问myClass。

在AppDelegate.h中我写道:

@property (strong, nonatomic) testClass *myClass;

在AppDelegate.m中:

#import "testClass.h"
@synthesize myClass;

这应该是对的,对吧?

myClass.h

 @property (strong, nonatomic) NSString *string;

myClass.m

@synthesize string;

当我尝试从appDelegate访问myClass时,我写道:

self.myClass.string = @"test";
NSLog(@"appDelegate: %@", self.myClass.string);

结果是:

appDelegate: (null)

3 个答案:

答案 0 :(得分:2)

#import "AppDelegate"

并写下

@class AppDelegate;

答案 1 :(得分:2)

我认为您必须分配并初始化myClass

myClass = [MyClass alloc] init]档案

中写下AppDelegate.m

答案 2 :(得分:2)

除非您没有显示,否则您不会分配testClass而不会将其分配给myClass。 Objective-C与C ++或Java不同,您可以简单地声明特定类类型的变量并在堆栈上实例化它。您使用的每个类都必须实例化,无论是手动还是通过InterfaceBuilder。例外是由具有单个共享实例的各种框架提供的一些类。您只需要求共享实例,而不是分配这些类。但是,这不是这种情况。这是你自己的类,所以你需要分配它。

看起来像是:

myClass = [[testClass alloc] init];