2012-05-05 80 views
1

我剛剛削減了大量的錯誤,現在我的代碼編譯得很好,但它總是在我創建的createEntity方法中崩潰。看起來沒有什麼問題,但有人可以幫我嗎?有什麼建議嗎?在看起來沒有錯誤的地方崩潰

-(void)createEntityWithX:(int)newEntityX andY:(int)newEntityY withType:(int)newEntityType withWidth:(int)newEntityWidth andLength:(int)newEntityLength atSpeed:(int)newEntitySpeed 
{ 
    Entity tmpEntity; 
    tmpEntity.entityX = newEntityX; 
    tmpEntity.entityY = newEntityY; 
    tmpEntity.entityLength = newEntityLength; 
    tmpEntity.entityWidth = newEntityWidth; 
    tmpEntity.entityType = newEntityType; 
    tmpEntity.entitySpeed = newEntitySpeed; 

    int arrayAmount = [entityArray count]; 
    NSValue *tmp = [NSValue valueWithBytes:&tmpEntity objCType:@encode(struct Entity)]; 

    [entityArray insertObject:tmp atIndex:arrayAmount]; 

    [tmp release]; 
} 
+2

你有沒有調試過,看看哪一行是造成麻煩? – Anila

+0

int arrayAmount = [entityArray count]; NSValue * tmp = [NSValue valueWithBytes:&tmpEntity objCType:@encode(struct Entity)]; [entityArray insertObject:tmp atIndex:arrayAmount];其中一個......編譯好但崩潰時,這種方法被稱爲 – DuskFall

+1

和什麼是崩潰消息? – Anila

回答

1

這裏有一件或兩件事情是錯誤的。有可能entityArray不是NSMutableArray,而是NSArray,在這種情況下,您會收到「無法識別的選擇器」錯誤。

解決之後,您需要修復索引。由於插入的最後一個有效索引是count-1,因此您無法在對應於其count的索引處插入對象到NSMutableArray。你應該使用addObject:把一些東西放在數組的末尾:

NSValue *tmp = [NSValue valueWithBytes:&tmpEntity objCType:@encode(struct Entity)]; 

[entityArray addObject:tmp]; 
+0

我認爲,因爲它的基數爲0,第10項將在索引9,所以計數將返回10呢? – DuskFall

+1

是的,最後一個插入的有效索引是9。 –