0

我在 ViewController 中,试图访问对象“背景图片”拥有的对象“猫”中的方法。ViewController 有一个背景图片的实例。

“cat.h”中的方法/消息:

@interface Cat : NSObject
    -(BOOL)checkIfTouchHit:(float) xx :(float) yy; 
@end

“猫.m”:

- (BOOL)checkIfTouchHit:(float) xx :(float) yy{
    NSLog(@"Inside checkIfTouchHit");
    return YES;
}

“背景图片.h”:

#import "Cat.h"

@interface BackGroundPicture : NSObject
    @property (strong) Cat * katt;
@end

“背景图片.m”:

@implementation BackGroundPicture
    @synthesize katt = _katt
@end

“视图控制器.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];
}

我知道这会被执行。我希望这个编辑有意义,经过漫长的一天后我的头被毁了:)明天早上再回来查看。

4

2 回答 2

0

据我所知,您正在正确访问该方法。为了便于阅读,您可以使用该属性(您也不需要演员表)

[self.bakgrunnsbilde.katt checkIfTouchHit:touchLocation.x :touchLocation.y]

,但是您的操作方式也应该有效。

您应该检查您的-viewDidLoad方法是否被调用以及self.bakgrunnsbilde何时self.bakgrunnsbilde.kattnil调用-viewDidLoad。其中之一应该让你走上正确的轨道。

于 2012-12-22T01:53:25.353 回答
0

它会起作用,但 BackGroundPicture.m 需要先分配一只猫。

所以在 BackGroundPicture.m 中,这样做:

- (id)init {

    self = [super init];
    if (self) {
        _katt = [[Cat alloc] init];
    }
    return self;
}

通常,请记住在使用对象之前分配它们。正如 Valentin 指出的那样,您可能还需要创建背景图片。在 viewDidLoad 中,执行以下操作:

bakgrunnsbilde = [[BackGroundPicture alloc] init];
于 2012-12-22T01:56:36.247 回答