难以访问另一个类的属性

时间:2013-11-13 21:20:16

标签: ios objective-c

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

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

3 个答案:

答案 0 :(得分:1)

你真的应该在接口中使用@property (nonatomic, strong) ClassA *classA;使ClassA成为ClassB的属性,这将为你生成一个setter和getter。使用像您所做的那样的普通C变量意味着您只能使用->指针间接访问它,并且默认情况下它将受到保护。大多数人在实现中在类扩展中使用这些类型的变量,但在其接口上使用属性。

无论您在何处实例化ClassB类,请使用classB.classA = self;

设置其classA属性

例如:

- (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并使用它来存储“全局”变量。