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

时间:2011-02-25 12:39:28

标签: iphone ios4 nsxmlparser

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

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

BOOL success = [lxmlParser parse];

如果我只是将应用程序推送到后台并带来,而不是杀死后台任务 它回到前台,问题仍然存在。唯一的解决方法是杀死跑步 后台任务(是的,我的是一个后台任务,听“重要的位置变化”) 并重新启动应用程序。从现在开始,解析工作正常......

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

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

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

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