2013-05-16 2 views
-2

У меня есть вопрос. Было бы здорово, если бы кто-нибудь мог мне помочь. У меня есть класс myObject и класс HelloWorldLayer. В HelloWorld я хочу вызвать метод doSomething на myObjectX.Objective-C - Не получить доступ к объекту из другого класса

Но с

[myObjectX doSomething]; 

это хотят не работать.

Кто-нибудь знает, как это сделать?

Как мне называть doSomething на myObjectX без изменения оставшегося кода.

Большое спасибо.

myObject.h 
@interface myObject : CCSprite { 
} 

-(void)doSomething; 
@end 

myObject.m 
@implementation myObject 

-(void)doSomething 
{ 
    NSLog(@"test"); 
} 
@end 

HelloWorldLayer.h 
@interface HelloWorldLayer : CCLayerGKLeaderboardViewControllerDelegate> 
{ 
    CCSprite *myObjectX; 
} 
-(void)test; 
@end 

HelloWorldLayer.m 
@implementation HelloWorldLayer 
-(void)test 
{ 
    myObjectX = [[myObject alloc]init]; 
    [myObjectX doSomething]; 
} 
@end 
+0

У вас есть #import "myObject.h" в вашем классе HelloWorldLayer? – duDE

+0

Да! И работает doSomething Method in - (void) drawMyObject. Но в ccTouchBegan это не работает. – user2343538

ответ

1

ч

@interface HelloWorldLayer:CCLayer 
{ 
    myObject *myObjectX; 
} 

Чем вы будете в состоянии назвать свои методы myObjectX.

+0

Я пробовал это! Но чем он говорит мне в - (void) drawMyObject, когда я вызываю [myObject doSomething]; «Нет видимого @interface для« CCSprite »объявляет селектор« doSomething » – user2343538

+0

@ user2343538: Это сообщение указывает, что вы вводите переменную экземпляра как CCSprite, а не' myObject', как это делает ProFFeSSoR. – Chuck

0

Изменить

myObject *myObjectX = [[myObject1 alloc]init]; 

в

myObject1 *myObjectX = [[myObject1 alloc]init]; 

потому что -(void)doSomething; объявлен в ваших myObject1 и myObject2 классов.

Именно это сообщение говорит: у вас нет -(void)doSomething; в вашем классе myObject.

Или вы могли бы добавить:

@interface myObject:CCSprite 
{ 

} 
-(void)doSomething; // Add here and implement in your .m 
@end 

Надеется, что это помогает.

EDIT:

Вы сделали это неправильно:

@interface HelloWorldLayer : CCLayerGKLeaderboardViewControllerDelegate> 
{ 
    CCSprite *myObjectX; 
} 
-(void)test; 
@end 

Правильно это с этим:

@interface HelloWorldLayer : myObject <CCLayerGKLeaderboardViewControllerDelegate> 
{ 
} 
@end 

Априори, вы могли бы использовать doSomething в HelloWorldLayer, потому что он наследует от myObject.

+0

Спасибо за вашу помощь Я не могу изменить его, потому что у меня есть случайный случай, когда он выбирает myObject1 или myObject2 и записывает его в myObjectX. Я пробовал второй способ, но я не хочу работать. У меня есть проблема, чтобы понять, что происходит не так. выше в более простом примере ...Что мне нужно сделать, чтобы вызвать doSomething на myObjectX в методе теста. Надеюсь, кто-нибудь может мне сказать. Спасибо – user2343538

+0

Отредактировал свой ответ относительно вашего комментария. Надеюсь это поможет :) – Lucien