2011-10-24 45 views
1

我很难实现一种游戏状态技术,它允许我通过将当前状态存储在合适的变量中来切换不同的游戏状态。虚拟无效的目标C等效 - 在游戏状态技术中使用

我创建了NSObject * currentState,它被设置为当前状态,但是当试图向[currentState方法]发送消息时,我得到'may not respond'错误消息。 (由于NSObject类型)。

我也尝试创建一个名为Gamestate的超类模板,并在从gamestate继承的同时创建了单个gamestates。然而,还有另外一个错误消息,表明游戏状态对象中没有实现任何方法(这是正确的,因为我只想在子对象中实现方法)。

不知道协议是否会帮助我。有关如何实现没有错误信息的gamestate的任何建议?

在此先感谢;)

回答

0

看一看Creating an abstract class in Objective C

如果您声明id currentState而不是NSObject *currentState,则不会收到[currentState method]的“可能无法响应”警告。

+0

感谢rob,添加id已经删除了错误信息。首先忘记从* currentState中删除'*',我将不得不找出Id为什么不接受指针类型。再次感谢;) – eJm

+0

'id'是一个指针,所以你不需要'*'。只要将'id'想象成像'NSObject *'一样,但检查错误较少。 –

0

如果GameStates不会共享太多共同的代码(或者如果您可以以不同的方式共享),抽象类是一个好主意,或者使用协议。也就是说,如果你要编写一个抽象类,但所有的方法都是抽象的,并且类中没有代码,只有声明,那么协议可能会更好地匹配你正在做的事情。

+0

谢谢morningstar,我想过使用协议,尽管我努力确保在课堂上实施必要的方法。协议主要是为了确保我不会忘记实现特定的方法?干杯:) – eJm

+0

你总是可以使用一个裸ID变量,而不是一个协议。协议几乎和你说的一样。它使变量具有强类型,因此您必须在其中放入适当的对象。它允许你在编译时检查你在运行时不会得到“无法识别的选择器”。 – morningstar