我觉得我必须以错误的方式解决这个问题,而且我可能找不到一个非常简单的解决方案。在ClassA.h中,我有:
@property (strong, retain) NSManagedObject *form;
在ClassB中我尝试过:
#import "ClassA"
@interface ClassB ()
{
ClassA *classA;
}
然后在viewDidLoad中我有:
NSLog(@"form::%@", classA.form);
但每次都是零,即使我在classA(它的一个viewcontroller)上它肯定有一个值。
修改
所以我按照BlackRider给出的例子 CLASSA
MyManager *sharedManager = [MyManager sharedManager];
sharedManager.someProperty = self.form;
CLASSB
MyManager *sharedManager = [MyManager sharedManager];
NSLog(@"globalform::%@", sharedManager.someProperty);
并且我仍然在日志打印中获得空值。
答案 0 :(得分:1)
你真的应该在接口中使用@property (nonatomic, strong) ClassA *classA;
使ClassA成为ClassB的属性,这将为你生成一个setter和getter。使用像您所做的那样的普通C变量意味着您只能使用->
指针间接访问它,并且默认情况下它将受到保护。大多数人在实现中在类扩展中使用这些类型的变量,但在其接口上使用属性。
无论您在何处实例化ClassB
类,请使用classB.classA = self;
例如:
- (void)loadMyForm {
ClassB *classB = [ClassB alloc] init];
classB.classA = self;
}
答案 1 :(得分:0)
由于您使用故事板(可能是segues),您可以执行以下操作:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Get a reference to the destination view controller
if([[segue destinationViewController] isKindOfClass:[ClassA class]]) {
ClassA *vc = [segue destinationViewController];
// now you can access vc.form
}
}
答案 2 :(得分:0)
我最终使用appDelegate并使用它来存储“全局”变量。