在我的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)
答案 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];