0

オブジェクト「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];
}

私はこれが実行されることを知っています。この編集が理にかなっているといいのですが、長い一日の後に頭が台無しになっています:)明日の朝に戻って確認します。

4

2 に答える 2

0

私が見る限り、メソッドに正しくアクセスしています。読みやすさのために、プロパティを使用できます(キャストも必要ありません)

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

、しかし、それを行う方法も同様に機能するはずです。

-viewDidLoadメソッドが呼び出されるかどうself.bakgrunnsbildeか、および呼び出されたときに呼び出されself.bakgrunnsbilde.kattないかどうかを確認する必要があります。これの 1 つが正しい軌道に乗るはずです。nil-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 が指摘しているように、BackGroundPicture も作成する必要がある場合があります。viewDidLoad で、次のようにします。

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