gpt4 book ai didi

objective-c - 调用委托(delegate)方法,无法识别的选择器,因为发送到错误的对象

转载 作者:可可西里 更新时间:2023-11-01 05:31:50 25 4
gpt4 key购买 nike

在我的应用程序中,我做了很多网络加载。我的数据模型由“Loader”对象组成,这些对象执行此加载并在完成/失败时调用它们的委托(delegate)。所有委托(delegate)都符合“LoaderDelegate”协议(protocol)。

我遇到的问题是有时看似随机的对象,而不是委托(delegate),正在获取委托(delegate)消息。这当然会因为无法识别的选择器而导致崩溃。

只有一组崩溃日志告诉我哪个加载器有问题,其他加载器没有该信息,只有收到消息的随机对象。

我被困在如何确定这个问题的真正原因上。

一组崩溃日志有一个加载程序试图调用它的委托(delegate)但到达 _UIImageViewExtendedStorage。另一个有一个加载器正在到达 __NSCFInputStream。另一个 __NSBlockVariable__。还有一个,CALayer

这只是我 3 天前的最新测试版。

如果每次都是同一个对象,那是一回事,但它看起来几乎是随机的。内存是否有可能以某种方式被新对象覆盖?

我所有加载器的委托(delegate)属性都是一个分配属性,但当加载器完成时委托(delegate)始终处于事件状态(委托(delegate)是调用加载器的 View Controller )。

最佳答案

请发布一些代码,因为很难排除故障。请记住在 dealloc 中将您的委托(delegate)设为 nil。

- (void) dealloc {
objectOfWhichIAmTheDelegate.delegate = nil;
}

更重要的是,委托(delegate)应该是分配属性而不是保留 - 但在您的情况下这不是问题。

@property (assign) id<TheMightyDelegate> delegate;

您应该做的另一件事是确保委托(delegate)在您触发方法之前响应您要发送给他的选择器。

if ([delegate respondsToSelector:@selector(yourMethod)]) {
[delegate performSelector:@selector(yourMethod)];
}

希望这能对您的问题有所帮助。如果没有,请提供一些代码。

关于objective-c - 调用委托(delegate)方法,无法识别的选择器,因为发送到错误的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8369895/

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