如何从外部访问另一个对象内的对象中的方法?

时间:2012-12-22 01:37:36

标签: iphone objective-c

我在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];
}

我知道这会被执行。我希望这个编辑有道理,经过漫长的一天后我的脑袋被毁了:)明天早上去看看。

2 个答案:

答案 0 :(得分:0)

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

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

,但你的做法也应该有效。

-viewDidLoad被调用时,您应该检查是否调用了self.bakgrunnsbilde方法以及self.bakgrunnsbilde.kattnil是否-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];