调用外部类方法导致崩溃目标-c

时间:2011-03-27 11:18:04

标签: objective-c xcode class cocos2d-iphone box2d

我有两个班,使用Box2d,Cocos2d Construct.mm和Level1.mm
构造包含在box2d物理引擎中创建不同对象的所有方法 Level1包含有关对象绘图的信息。

在构造实现中,我有:
Construct.mm

-(void) someInitMethod{  
Level1 *level1 = [[Level1 alloc] init];  
[level1 mapping];  
}  
-(void) someCreateRectMethod:(argue)ments{  
//create rect  
}

在Level1实现中,我有:

Level1.mm

-(void) mapping{  
Construct *constr;  
if (constr == nil) constr = [[Construct alloc] init];  
[constr someCreateRectMethod:(argue)ments];  
}

现在,我知道Level1 * level1的分配工作正常。它跳转到 - (void)mapping { }。
我的问题是创建Construct * constr对象并初始化它。没有if(constr == nil)语句。在发布任何错误报告之前,模拟器将立即死亡 如果我把if(constr == nil)然后尝试调用[constr someCreateRectMethod:arguement];

控制台报告:

  

* 由于未捕获的异常而终止应用   'NSInvalidArgumentException',原因:   ' - [Level1 someCreateRectMethod:]:无法识别   选择器发送到实例0x5557fc0'

我认为这是因为它没有分配,因此试图发送给自己(Level1)而不是Construct 为什么我的Construct * constr类对象不能分配?就像我说的,没有错误报告它发生..我已经导入了Construct.h文件。我花了最后4个小时试图让它发挥作用。

修改

我刚刚从Construct继承了第1层。而不是调用[constr someCreateRectMethod];我只是叫[super someCreateRectMethod];
这应该在理论上有效,但模拟器崩溃并且没有记录错误报告..

再次感谢您的时间。
奥利弗。

2 个答案:

答案 0 :(得分:1)

你可能最终没有创建constr - 初始值是未定义的,因此不太可能是零。如果您的代码在[[constr alloc] init]处终止,那么您似乎很可能无法继承NSObject(您应该)并且未实现init(您经常需要)。

答案 1 :(得分:-1)

好的,我发现了问题,当我打电话时,正在执行一个无限循环 [level1 mapping]。我在Level1方法映射中添加了一个NSLog语句,以查看控制台是否填满了NSLogs。

这个无限循环仅在我尝试初始化Construct * constr对象时创建...

Construct.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;
}

Level1.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  
...