假设我正在使用NSXMLParser将一个关卡(显然是存储为XML文档)加载到我的iPhone游戏中。 NSXMLParser通过分配委托并在关键时刻向其发送消息来工作。在执行其他任何操作之前,如何确保加载整个关卡?我知道我可以使我的主类成为委托并实现parserDidEndDocument,但这感觉很hacky。我的主班不必对解析方式一无所知!另一方面,如果我为解析级别创建了单独的类/委托,则我的主类无法知道解析何时完成,除非它连续查询解析类或解析类向其发送消息。无论哪种方式,主类都将与解析类的实现联系在一起。
我可以在主类中隐藏所有这些事件驱动的业务,并在完成后简单地使解析器返回级别对象吗? (即newLevel = [[GameLevel alloc] initFromXML:xmlfile],这将依次使用NSXMLParser加载该级别,然后在完成后以某种方式返回。)目前,我正在使用外部DOM解析器,但是很好奇如何使用NSXMLParser做到这一点。
抱歉,这是一个愚蠢的问题-我对此有些陌生!
编辑:根据NSXMLParser类引用,“启动事件驱动的解析操作”的解析方法,如果成功则返回YES,如果出错则返回NO。这是否意味着它仅在解析完成后才返回?这将解决我的问题,因为我假设即使在parse方法返回后,解析仍会继续。
最佳答案
NSXMLParser阻塞,直到解析完成。您无需执行任何操作,因为将在parse方法返回后加载级别。
关于cocoa-touch - NSXMLParser:如何等待加载完成?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4590028/