2014-06-11 64 views
0

我有一個方法,從數組中選擇一個隨機的精靈節點放置在屏幕上。儘管我的應用崩潰了。這是從錯誤消息的代碼段:NSArray可能導致應用程序崩潰?

*終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因: ' - [__ NSCFConstantString decodeObjectForKey:]:無法識別的選擇發送到實例0x47b4'

這是我寫出來的方法。

-(SKSpriteNode *) gamePieces { 

NSArray *things = [NSArray arrayWithObjects: @"piece1", @"piece2", @"piece3", nil]; 

int r = arc4random() % [things count]; 

SKSpriteNode *randomObject = [[SKSpriteNode alloc] initWithCoder:[things objectAtIndex:r]]; 



return randomObject; 
} 

任何想法是什麼問題?

+4

你正在申請「decodeObjectForKey到一個NSString,這是行不通的 –

+0

我該如何解決這個問題? – cocoamoco

+0

首先,瞭解如何捕獲和解釋異常堆棧跟蹤,以便找出錯誤的位置然後找出你爲什麼調用「decodeObjectForKey」(這是在NSArray或NSDictionary上使用'[]'索引的操作轉化爲)在NSString上(你可能錯誤地將它標記爲NSArray或NSString ) –

回答

0

正如@HotLicks和@ LearnCocos2d所述,-initWithCoder:在這裏不合適。通常使用指定的初始值設定項(+spriteNodeWithColor:size:,+spriteNodeWithImageNamed:spriteNodeWithTexture:)完成從頭創建新的SKSpriteNode。假設你只是想用隨機圖像創建一個SKSpriteNode,請看下面的代碼。

- (SKSpriteNode *) randomGamePiece { 
    NSArray *filename = [NSArray arrayWithObjects: @"piece1", @"piece2", @"piece3", nil]; 
    int r = arc4random() % [things count]; 

    NSString * randomFilename = [things objectAtIndex:r]; 
    SKSpriteNode *randomObject = [SKSpriteNode spriteWithImageNamed:randomFilename]; 

    return randomObject; 
} 

我衷心建議通過包含新的和中間雪碧套件程序員很多有用的片段和指針的Sprite Kit Programming Guide瀏覽。