假设我正在使用NSXMLParser将一个级别(显然存储为XML文档)加载到我的iPhone游戏中。 NSXMLParser的工作原理是分配一个委托并在关键时刻发送消息。在做其他事情之前,如何确保我的整个关卡都已加载?我知道我可以让我的主类成为委托并实现parserDidEndDocument,但这感觉非常hacky。我的主要课程不应该对解析的方式有任何了解!另一方面,如果我为解析我的级别创建一个单独的类/委托,我的主类无法知道解析何时完成,除非它连续查询解析类或解析类向其发送消息。无论哪种方式,主类都将与解析类的实现联系在一起。
我可以在主类中隐藏所有这些事件驱动的业务,只需让解析器在完成后返回关卡对象吗? (即,newLevel = [[GameLevel alloc] initFromXML:xmlfile],它将依次使用NSXMLParser加载关卡,然后在完成时以某种方式返回。)目前,我正在使用外部DOM解析器,但我是好奇如何用NSXMLParser完成这项工作。
很抱歉,如果这是一个愚蠢的问题 - 我对此有点新鲜!
编辑:根据NSXMLParser类引用,“启动事件驱动的解析操作”的解析方法,如果成功则返回YES,如果有错误则返回NO。这是否意味着它只在解析完成后才返回?这将解决我的问题,因为我假设即使在返回解析方法之后解析仍在继续。
答案 0 :(得分:1)
NSXMLParser阻塞,直到解析完成。您不必执行任何操作,因为在解析方法返回后将加载该级别。