簡體   English   中英

無法識別的選擇器發送到實例 - 為什么?

[英]Unrecognized selector sent to instance - why?

好的,所以我有一個帶有 class object 的代碼,稱為“游戲”。 每一幀(60 FPS)我用 function 更新 object ,得到一個字符串。 運行游戲 5 秒后,我收到無法識別的選擇器發送到實例錯誤。

更新:

[game updatePlayersAndMonsters:@"0" monsters:@"0"];

function:

-(void)updatePlayersAndMonsters:(NSString*)players monsters:(NSString*)monsters {
    CCLOG(@"%@.%@", players, monsters);
}

我不明白發生了什么事。 錯誤:

2011-07-03 12:13:19.175 app[65708:207] -[NSCFString updatePlayersAndMonsters:monsters:]: unrecognized selector sent to instance 0xc4e95b0
2011-07-03 12:13:19.176 app[65708:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFString updatePlayersAndMonsters:monsters:]: unrecognized selector sent to instance 0xc4e95b0'

我應該怎么辦? 謝謝。 如果您需要任何其他詳細信息,也請 IDK,所以如果我忘記了什么就寫,我只是不知道。

更新: Gmae 是 class GameNode 的 object:

    +(id) GmameNodeWithMapID:(int)MapID_ scene:(SomeScene*)MainScene_ players:(NSString*)Cplayers_ monsters:(NSString*)Cmonsters_ monsterCount:(NSString*)monsterCount_
{
    return [[[self alloc] GmameNodeWithMapID:MapID_ scene:MainScene_ players:Cplayers_ monsters:Cmonsters_ monsterCount:monsterCount_] autorelease];
}
-(id) GmameNodeWithMapID:(int)MapID scene:(SomeScene*)MainScene players:(NSString*)Cplayers monsters:(NSString*)Cmonsters monsterCount:(NSString*)monsterCount
{
    if( (self=[super init])) {

我創建它:

game = [GameNode GmameNodeWithMapID:ChoosenMapID scene:self players:Thing[5] monsters:Thing[6] monsterCount:Thing[4]];

更新 2

我創建了 SomeScene:

+(id) scene {
    CCScene *s = [CCScene node];
    id node = [SomeScene node];
    [s addChild:node];
    return s;
}
-(id) init {
    if( (self=[super init])) {

我用這個:

[[CCDirector sharedDirector] replaceScene: [CCTransitionRadialCW transitionWithDuration:1.0f scene:[LoginScene scene]]];

既然你暗示更新 function [game updatePlayersAndMonsters:@"0" monsters:@"0"]; 在游戲的前 5 秒被調用,然后出現錯誤,我的猜測是game object 沒有正確保留,因此它被釋放並且連續嘗試向其發送消息失敗,因為一些NSString object 已經重用其 memory (並且它沒有updatePlayersAndMonsters:monsters選擇器)。

請分享game是如何創建的(alloc/init)以及它是如何存儲在您的類中以進一步幫助您的。

激活 NSZombies 跟蹤也有助於診斷這一點。

編輯:添加代碼后

在我看來,在這條線上:

 game = [GameNode GmameNodeWithMapID:ChoosenMapID scene:self players:Thing[5] monsters:Thing[6] monsterCount:Thing[4]];

您正在為自動發布的GameNode設置局部變量或 ivar。

現在,由於您沒有使用屬性,我也看不到您自動發布的GameNode上的任何保留,我的假設似乎得到了證實。 分配給一個保留屬性:

self.game = [GameNode ...];

被游戲聲明為:

@property (nonatomic, retain)...

或者做一個保留自己:

 game = [[GameNode GmameNodeWithMapID:ChoosenMapID scene:self players:Thing[5] monsters:Thing[6] monsterCount:Thing[4]] retain];

'NSInvalidArgumentException', reason: '-[NSCFString updatePlayersAndMonsters:monsters:]:表示您正在嘗試將 updatePlayersAndMonsters 發送到字符串 object。 您是否正在重新分配game以指向其他內容?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM