我在ViewController中,试图访问对象“backgroundpicture”拥有的对象“cat”中的方法。 ViewController有一个backgroundpicture实例。
“cat.h”中的方法/消息:
@interface Cat : NSObject
-(BOOL)checkIfTouchHit:(float) xx :(float) yy;
@end
“Cat.m”:
- (BOOL)checkIfTouchHit:(float) xx :(float) yy{
NSLog(@"Inside checkIfTouchHit");
return YES;
}
“BackGroundPicture.h”:
#import "Cat.h"
@interface BackGroundPicture : NSObject
@property (strong) Cat * katt;
@end
“BackGroundPicture.m”:
@implementation BackGroundPicture
@synthesize katt = _katt
@end
“ViewController.m”:
@interface ViewController ()
@property (strong) BackGroundPicture * bakgrunnsbilde;
@end
@implementation BackGroundPicture
@synthesize bakgrunnsbilde = _bakgrunnsbilde;
- (void)viewDidLoad
{...
[[self.bakgrunnsbilde katt] checkIfTouchHit :(float)touchLocation.x :(float)touchLocation.y]
...}
cat中方法“checkIfInside”内的字符串不会显示。我也试过了 [_bakgrunnsbilde katt] ...... 但同样缺乏结果,我相信这是以同样的方式编译。我想知道我在这里失踪了什么,并希望有人可以提供帮助。谢谢:))
编辑我忘记在BackGroundPicture.m中添加几行。它是从ViewController中的ViewDidLoad开始运行的方法。在BackGroundPicture.m中就像这样:
- (void)createObjects {
Cat * katt = [[Cat alloc] init];
}
从ViewController.m中调用它,如下所示:
- (void)viewDidLoad
{
[_bakgrunnsbilde createObjects];
}
我知道这会被执行。我希望这个编辑有道理,经过漫长的一天后我的脑袋被毁了:)明天早上去看看。
答案 0 :(得分:0)
据我所知,您正确访问该方法。为了便于阅读,你可以使用该属性(你也不需要演员)
[self.bakgrunnsbilde.katt checkIfTouchHit:touchLocation.x :touchLocation.y]
,但你的做法也应该有效。
当-viewDidLoad
被调用时,您应该检查是否调用了self.bakgrunnsbilde
方法以及self.bakgrunnsbilde.katt
或nil
是否-viewDidLoad
。其中之一应该让你走上正轨。
答案 1 :(得分:0)
它会起作用,但BackGroundPicture.m需要先分配一只猫。
所以在BackGroundPicture.m中,执行以下操作:
- (id)init {
self = [super init];
if (self) {
_katt = [[Cat alloc] init];
}
return self;
}
通常,请记住在使用它们之前分配对象。 Valentin指出,你可能还需要创建一个BackGroundPicture。在viewDidLoad中,执行以下操作:
bakgrunnsbilde = [[BackGroundPicture alloc] init];