gpt4 book ai didi

iphone - NSXMLParser 接收错误 : [Parser conformsToProtocol:]: Message sent to deallocated instance 0xcd6be20

转载 作者:行者123 更新时间:2023-12-03 19:45:25 24 4
gpt4 key购买 nike

当我弹出 NSXMLParser View Controller 并稍后返回时,我从 NSXMLParser 收到此错误。
2010-12-31 21:49:32.306 应用程序名称[12716:207] *** -[解析器符合协议(protocol):]:消息发送到已释放实例 0xcd6be20
:

这是我的代码:https://gist.github.com/761366

最佳答案

从您提供的代码片段中不可能准确说出发生了什么,但此错误通常意味着您已经过度释放了正在发送消息的对象。我对您的描述和代码的阅读是,解析器比您在此处设置为其委托(delegate)的对象的生命周期更长:

- (void)parseXMLFileAtURL:(NSString *)URL
{
stories = [[NSMutableArray alloc] init];
NSURL *xmlURL = [NSURL URLWithString:URL];
parser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];
[parser setDelegate:self];
[parser setShouldProcessNamespaces:NO];
[parser setShouldReportNamespacePrefixes:NO];
[parser setShouldResolveExternalEntities:NO];
[parser parse];

}

从您发布的代码片段中无法判断变量解析器的范围是什么。我怀疑它是一个全局变量,或者比委托(delegate)的生命周期更长。我怀疑这一点,因为我看到您将“self 对象”设置为委托(delegate),但从未取消设置它,并且错误消息是 informsToProtocol: 暗示这可能是问题所在,因为 NSXMLParser 无疑会调用在尝试调用任何委托(delegate)方法之前。当此对象消失时,它需要通过调用以下命令放弃其作为 NSXMLParser 实例的委托(delegate)的角色:

[parser setDelegate: nil];

如果解析器实际上是全局的或以其他方式共享,那么您还应该小心地在每次调用 parseXMLFileAtURL: 时重新创建它,而不释放先前的值。如果它是对象本身的 iVar,您仍然需要确保并清除委托(delegate),并在对象消失时(即在 dealloc 中)释放并清除 iVar。

但同样,根据您发布的代码片段无法确定。

关于iphone - NSXMLParser 接收错误 : [Parser conformsToProtocol:]: Message sent to deallocated instance 0xcd6be20,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4572524/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com