[英]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.