我有两节课。我正在尝试从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);
}
我在提供的代码中做错了什么,或者是由其他原因导致的问题?
答案 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