难以访问另一个类的属性
我觉得我必须以这种错误的方式去解决问题,而且可能有一个非常简单的解决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。