未实现委托方法导致崩溃

2024-02-05

我创建了一个协议并将其分配给委托对象

@protocol AppBrainDelegate <NSObject>
@optional
- (void)didLocateUser;
- (void)didFinishLoadingDataWithData:(NSDictionary *)fetchedData;
@end

@interface Brain : NSObject
@property (strong, nonatomic) id <AppBrainDelegate> delegate;

我认为协议声明中这个 @Optional 的含义意味着,如果控制器不愿意,则不必监听委托方法。

如果没有在控制器中实现第一个委托方法,这是崩溃日志。如果我这样做,我就不会崩溃。似乎我不理解将委托方法声明为可选的概念。你能向我解释一下我的错误在哪里吗?

*由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[EventViewController didLocateUser]:无法识别的选择器发送到实例 0x1fb300”


The @optional如果该方法未在符合协议的类中实现,则会简单地抑制编译器警告。在调用委托方法之前,您仍然需要检查委托是否实现了它:

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

顺便说一句,您已经使用创建了委托属性strong语义。除非你有特别充分的理由使用strong,代表应该是weak,自从你的Brain类没有own它的委托(如果您考虑对象图)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

未实现委托方法导致崩溃 的相关文章

随机推荐