调用外部类方法会导致objective-c崩溃
我有两个类,使用Box2d和Cocos2d。调用外部类方法会导致objective-c崩溃,objective-c,xcode,class,cocos2d-iphone,box2d,Objective C,Xcode,Class,Cocos2d Iphone,Box2d,我有两个类,使用Box2d和Cocos2d。 构造1.mm和1.mm标高 构造包含在box2d物理引擎中创建不同对象的所有方法 级别1包含有关对象打印的信息 在构造实现中,我有: 构造.mm -(void) someInitMethod{ Level1 *level1 = [[Level1 alloc] init]; [level1 mapping]; } -(void) someCreateRectMethod:(argue)ments{ //create rect }
构造1.mm和1.mm标高
构造包含在box2d物理引擎中创建不同对象的所有方法
级别1包含有关对象打印的信息 在构造实现中,我有:
构造.mm
-(void) someInitMethod{
Level1 *level1 = [[Level1 alloc] init];
[level1 mapping];
}
-(void) someCreateRectMethod:(argue)ments{
//create rect
}
在1级实施中,我有:
标高1.mm
-(void) mapping{
Construct *constr;
if (constr == nil) constr = [[Construct alloc] init];
[constr someCreateRectMethod:(argue)ments];
}
现在,我知道Level1*Level1的分配工作正常。它跳转到-(void)映射{
}.我的问题是创建Construct*constr对象并初始化它。没有if(constr==nil)语句。模拟器将立即死亡,甚至在发布任何错误报告之前。
如果我输入If(constr==nil),然后尝试调用[constr someCreateRectMethod:arguement] 控制台报告: *由于未捕获异常而终止应用程序 “NSInvalidArgumentException”,原因: '-[Level1 someCreateRectMethod:]:无法识别 选择器已发送到实例0x5557fc0' 我认为这是因为它不是allocing,因此尝试发送到self(Level1)而不是构造。
为什么我的Construct*constr类对象不是allocing?就像我说的,没有错误报告它的发生。。我已导入Construct.h文件。我花了4个小时试着让它工作 编辑 我刚刚让第1层从构造继承。而不是调用[constr someCreateRectMethod];我只需调用[super-someCreateRectMethod]
这在理论上应该是可行的,但模拟器会崩溃,并且不会记录错误报告 再次感谢您抽出时间。
Oliver.您可能不会最终创建constr-初始值未定义,因此不太可能为零。如果您的代码在[[constr alloc]init]处终止,那么很可能您没有将NSObject子类化(您应该这样做),而没有实现init(您通常希望这样做)。好的,我发现了问题,当我调用
[level1映射]。我在Level1方法映射中添加了一条NSLog语句,以查看控制台中是否充满了NSLog 这个无限循环仅在我尝试初始化Construct*constr对象时创建 构造.mm
-(id) init
{
if( (self=[super init])) {
//ALLOCS
_Eggs = [[NSMutableArray alloc] init];
_Block1s = [[NSMutableArray alloc] init];
_Block2s = [[NSMutableArray alloc] init];
//Begin Mapping of environment
Level1 *level1 = [[[Level1 alloc] init] autorelease];
[level1 mapping];
}
return self;
}
标高1.mm
@implementation Level1
-(void) mapping{
NSLog (@"Mapping");
Construct *constr = [[Construct alloc]init];
return;
}
@end
控制台:
2011-03-28 09:43:24.980 Construct[14661:207] Mapping
2011-03-28 09:43:24.981 Construct[14661:207] Mapping
2011-03-28 09:43:24.982 Construct[14661:207] Mapping
2011-03-28 09:43:24.982 Construct[14661:207] Mapping
2011-03-28 09:43:24.983 Construct[14661:207] Mapping
2011-03-28 09:43:24.983 Construct[14661:207] Mapping
2011-03-28 09:43:24.984 Construct[14661:207] Mapping
2011-03-28 09:43:24.985 Construct[14661:207] Mapping
2011-03-28 09:43:24.985 Construct[14661:207] Mapping
2011-03-28 09:43:24.986 Construct[14661:207] Mapping
2011-03-28 09:43:24.986 Construct[14661:207] Mapping
...
cocos2d中的NSObject子类?是的。或者如果cocos中有更合适的子类,那么就将其子类化,因为它将是一个NSObject子类。但是,如果不将NSObject子类化,则不会有“init”的默认实现,也不会获得正常的init行为。包括您的接口文件。