我在我的聯繫人偵聽器代碼中收到EXC_BAD_ACCESS錯誤。下面是代碼:與聯繫人偵聽器發生EXC_BAD_ACCESS問題
主要對象類(GameObjects),通過它的所有對象的子類:
GameObjects.h:
#import "cocos2d.h"
#import "CCNode.h"
#import "CCPhysicsSprite.h"
#import "Box2D.h"
#include <math.h>
@interface GameObjects : CCNode {
//b2Body* objectBody_;
}
-(b2Body*)getObjectBody;
-(void)objectsTouched:(GameObjects*)otherObject;
@end
GameObjects.mm(現在我只想CCLOG告訴如果它的工作):
#import "GameObjects.h"
@implementation GameObjects
-(b2Body*)getObjectBody {
}
-(void)objectsTouched:(GameObjects*)otherObject {
CCLOG(@"it's working");
}
@end
ContactListenerTest.h:
#import <Foundation/Foundation.h>
#import "cocos2d.h"
#import "Box2D.h"
#import "Enemy.h"
#import "Sprite.h"
#import "GameObjects.h"
class ContactListenerTest : public b2ContactListener {
public:
b2World* world;
void BeginContact(b2Contact* contact);
};
ContactListenerTest.mm:
#import "ContactListenerTest.h"
void ContactListenerTest:: BeginContact(b2Contact *contact)
{
b2Fixture *fixtureA = contact->GetFixtureA();
b2Fixture *fixtureB = contact->GetFixtureB();
b2Body *fixtureABody = fixtureA->GetBody();
b2Body *fixtureBBody = fixtureB->GetBody();
GameObjects* spriteObject = (GameObjects*)fixtureABody->GetUserData();
GameObjects* spriteObject2 = (GameObjects*)fixtureBBody->GetUserData();
[spriteObject objectsTouched:spriteObject2];
[spriteObject2 objectsTouched:spriteObject];
}
當我被打印在控制檯下面的EXC_BAD_ACCESS錯誤:
-[Enemy objectsTouched:]: unrecognized selector sent to instance 0x8558840
敵人是GameObjects的一個子類。
我剛剛添加了斷言,我得到了一個EXC_BAD_ACCESS錯誤。在控制檯中打印了以下內容:***在虛擬void ContactListenerTest :: BeginContact(b2Contact *)(),/ Users/codefreak/Documents /..../ContactListenerTest.mm:36 (lldb)中聲明失敗' – dcone 2013-05-09 12:51:33
ContactListenerTest.mm是一個C++類,不是Objective-C類,所以應該使用NSCAssert1來代替NSAssert1。 – oopology 2013-05-09 13:03:30