难以访问另一个类的属性

我觉得我必须以这种错误的方式去解决问题,而且可能有一个非常简单的解决scheme,我似乎找不到。 在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); 

而我仍然在日志打印中获得空值。

你真的应该使用@property (nonatomic, strong) ClassA *classA;来使ClassA成为ClassB的一个属性@property (nonatomic, strong) ClassA *classA; 在界面中,这会为你生成一个setter和getter。 像你所做的那样,使用一个简单的Cvariables意味着你只能使用->指针间接访问它,并且它将被默认保护。 大多数人在其实现中使用类扩展中的这些types的variables,但在其接口上使用属性。

无论你实例化你的ClassB类,使用classB.classA = self;设置它的classA属性classB.classA = self;

例如:

 - (void)loadMyForm { ClassB *classB = [ClassB alloc] init]; classB.classA = self; } 

既然你使用了一个故事板(可能是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 } } 

我最终使用我的appDelegate并使用它来存储一个“全局”variables。