访问另一个类的属性

时间:2015-07-16 16:46:06

标签: ios objective-c

我有两节课。我正在尝试从Class1中的Class2访问属性(UIImageView的两个子类)。从Class1访问时,x属性为0。

在Class2.h中:

@interface ...
{
    int x;
}

@property (readwrite, nonatomic) int x;

在Class2.m中:

@synthesize x;

- (void)mainMethod
{
    x = 4;
    [NSTimer scheduledTimerWithTimeInterval:0.02 
                                     target:self 
                                   selector:@selector(updateX) 
                                   userInfo:nil 
                                    repeats:YES]
}

- (void)updateX
{
    x += 5;
}

在第1课:

- (void)mainMethod
{
    Class2 obj = [[Class2 alloc] init];
    NSLog(@"%i", obj.x);
}

我在提供的代码中做错了什么,或者是由其他原因导致的问题?

1 个答案:

答案 0 :(得分:0)

您永远不会调用-[Class2 mainMethod],因此x永远不会获得非零值。你想要:

// in Class1

- (void)mainMethod
{
    Class2 c2obj = [[Class2 alloc] init];
    [c2obj mainMethod];
    NSLog(@"%i", c2obj.x);
}

我在看的时候:

  • Class1只会让这个问题感到困惑。你的例子并不需要它。
  • 同样是计时器/ updateX的东西。
  • 如果您要创建任何UIView对象,则应该使用initWithFrame:CGRectZero之类的内容。
  • 简洁,简洁,简洁! ;)

[原问题的答案如下]

这里有很多问题,正如AlexC所列举的那样。 (void)init方法将调用以初始化对象,因此.x始终为0。

但我怀疑根本问题是init不是任何UIView的指定初始值设定项。您可能应该使用:

- (instancetype)initWithFrame:(CGRect)frame

可能 initWithCoder:,如果您要从Interface Builder创建这些视图。

比照。 Apple docs