0

在我的 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)

更新2:

我写了@class AppDelegate;在 viewController 中的 @import 行下方,但我仍然无法访问 myClass。一个主要问题(这可能是从视图中无法正常工作的原因)是我什至无法从 AppDelegate 访问 myClass。

在 AppDelegate.h 我写道:

@property (strong, nonatomic) testClass *myClass;

在 AppDelegate.m 中:

#import "testClass.h"
@synthesize myClass;

这应该是对的,对吧?

我的类.h

 @property (strong, nonatomic) NSString *string;

我的班级.m

@synthesize string;

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

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

结果是:

appDelegate: (null)
4

3 回答 3

2

#import "AppDelegate"

也写

@class AppDelegate;

于 2012-06-21T13:14:41.393 回答
2

我认为你必须分配和初始化myClass

写入文件 myClass = [MyClass alloc] init]_AppDelegate.m

于 2012-06-21T13:30:51.493 回答
2

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

它看起来像:

myClass = [[testClass alloc] init];
于 2012-06-21T14:45:10.940 回答