NSXMLParser解析无法首次调用委托...但在iPhone应用程序任务重新启动后工作

问题描述:

我有这个奇怪的问题。我正在使用NSXMLParser来解析从网络中获取 的XML数据。即使“解析”调用返回成功,当iPhone应用程序第一次运行时,也不会调用委托函数 。但是,当我重新启动 进程(运行iOS4.2的iPhone4)时,通过杀死后台任务&重新启动应用程序,正确调用了代理回调正确的 XML。 在模拟器和手机中都有完全相同的行为。NSXMLParser解析无法首次调用委托...但在iPhone应用程序任务重新启动后工作

NSXMLParser *lxmlParser = [[NSXMLParser alloc] initWithData:jData]; 
MyXMLParser *pxmlParser = [MyXMLParser initXMLParser]; 
[lxmlParser setDelegate:pxmlParser]; 

BOOL success = [lxmlParser parse]; 

,而不是杀死后台任务,如果我只是推应用背景,并把 回前台,问题就依然存在。唯一的解决方法是杀死正在运行的 后台任务(是的,我的是一个后台任务,正在侦听“重大位置更改”) 并重新启动应用程序。从现在开始,解析工作正常...

有人可以帮忙吗?

[MyXMLParser initXMLParser]什么意思,如果你遵循可可内存管理的指导原则(你应该是!),它会返回一个自动发布的对象(因为它不是以'alloc','new','copy'开头的)。那么这个对象永久保留在哪里呢?如果没有保留,当前的自动释放池退出时,它可能会从内存中过早地被转储。

顺便说一下,我会为你的autorelease构造方法选择一个更好的方法名称 - 一种以'init'开头的方法实际上并不是一个init方法令人困惑。在风格上,将'intXMLParser'重命名为'xmlParser'可能是一个好主意。

另外,您已将XMLParserDelegate实现类命名为“somethingXMLParser”。一个更好的选择就像'somethingXMLParserDelegate'。

+0

感谢您的建议。虽然命名被错误地指出了,但是这个类函数“initXMLParser”的假设功能是创建一个Singleton对象,实现是:+(id)initXMLParser if(!xmlParser)xmlParser = [[ MyXMLParser alloc] init]; \t return xmlParser; } – user634081 2011-02-25 13:08:49