Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 铸造不当?_Ios_Objective C_Casting_Cocos2d Iphone_Spritebuilder - Fatal编程技术网

Ios 铸造不当?

Ios 铸造不当?,ios,objective-c,casting,cocos2d-iphone,spritebuilder,Ios,Objective C,Casting,Cocos2d Iphone,Spritebuilder,我跟在后面。我一直在犯这个错误。我已经在显示的类(mainsecene.m)中导入了障碍物.h文件。我不知道我做错了什么 - (void)spawnNewObstacle { CCNode *previousObstacle = [_obstacles lastObject]; CGFloat previousObstacleXPosition = previousObstacle.position.x; if (!previousObstacle) {

我跟在后面。我一直在犯这个错误。我已经在显示的类(mainsecene.m)中导入了障碍物.h文件。我不知道我做错了什么

 - (void)spawnNewObstacle {
     CCNode *previousObstacle = [_obstacles lastObject];
     CGFloat previousObstacleXPosition = previousObstacle.position.x;

     if (!previousObstacle) {
         // this is the first obstacle
         previousObstacleXPosition = firstObstaclePosition;
     }

     Obstacle *obstacle = (Obstacle *)[CCBReader load:@"Obstacle"];
     obstacle.position = ccp(previousObstacleXPosition + distanceBetweenObstacles, 0);
     [obstacle setUpRandomPosition];
     [_physicsNode addChild:obstacle];
     [_obstacles addObject:obstacle];
 }
错误:

-[CCNode setUpRandomPosition]: unrecognized selector sent to instance 0x9a88a30
2014-04-20 10:51:28.046 FlappyFlyl[2104:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[CCNode setUpRandomPosition]: unrecognized selector sent to instance 0x9a88a30'

障碍物
变量不包含类型为
障碍物
的对象。相反,它保存类型为
CCNode
的对象
CCNode
没有名为
-setUpRandomPosition
的方法,因此会出现运行时错误。在Objective-C中,强制转换是一个禁止操作。它除了帮助代码的读者了解编写代码的人的意图之外,什么都不做


这方面Objto-C与C++、java等语言不同。Objective-C有一个类似于编程语言“Smalltalk”的对象系统。

可能您没有在SpriteBuilder的“障碍物.ccb”中正确设置根节点的自定义类。这就是为什么你的“障碍.ccb”根节点是
CCNode
而不是
障碍
对象的原因。

是什么让你认为强制转换改变了对象的类别??它所做的只是告诉编译器考虑类型是指定的。AFAIK障碍是CCBRead LoSouRy返回的节点的第一个孩子,我没有在一段时间内编写程序,而且我忘记了很多这些概念。你建议我做什么来修复它?使用相同的代码编写一个正确的CCNode类,该类具有您期望的代码,该示例运行良好have@LearnCocos2D这仅适用于
loadAscene
。常规加载应返回SpriteBuilder根节点。