2011-03-27 70 views
0

我有兩個類,使用Box2d,Cocos2d。
Construct.mm和Level1.mm
構造包含在box2d物理引擎中創建不同對象的所有方法
Level1包含有關繪製對象的信息。調用外部類方法導致崩潰objective-c

在結構實現我:
Construct.mm

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

在1級實現我:

Level1.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' 的,理由是: ' - [1級someCreateRectMethod:]:無法識別 選擇發送到實例0x5557fc0'

我認爲這是因爲它沒有分配,因此試圖發送到自我(Level1)而不是構造。
爲什麼我的Construct * constr類對象沒有分配?就像我說的,沒有錯誤報告它發生..我已經導入Construct.h文件。我花了最後4個小時試圖讓這個工作。

編輯

我剛剛從構建體制1層繼承。而不是調用[constr someCreateRectMethod];我只需調用[super someCreateRectMethod];
這應該在理論上工作,但模擬器崩潰,並沒有記錄錯誤報告。

再次感謝您的時間。
奧利弗。

+0

顯示真正的代碼。包括你的接口文件。 – falconcreek 2011-03-27 14:53:36

回答

1

您可能不會創建構造 - 初始值未定義,因此不可能爲零。如果你的代碼在[[constr alloc] init]終止,那麼你很可能沒有繼承NSObject(你應該這麼做),也沒有實現init(你經常想要的)。

+0

cocos2d的子類NSObject? – Ospho 2011-03-27 11:30:14

+0

是的。或者如果在子類中有更合適的子類,那麼子類就是它的一個NSObject子類。但是如果你沒有繼承NSObject,你將沒有默認的'init'實現,並且不會獲得正常的init行爲。 – Tommy 2011-03-27 13:53:40

-1

好吧,我發現問題,正在執行一個無限循環當我打電話
[level1映射]。我向Level1方法映射添加了一條NSLog語句,以查看控制檯是否填滿了NSLog。

只有當我嘗試初始化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 
...