gpt4 book ai didi

ios - 未实现委托(delegate)方法导致崩溃

转载 作者:技术小花猫 更新时间:2023-10-29 10:30:29 27 4
gpt4 key购买 nike

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

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

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

我认为协议(protocol)声明中这个@optional 的含义意味着,如果 Controller 不想听,则不必听委托(delegate)方法。

如果没有在 Controller 中实现第一个委托(delegate)方法,这里是崩溃日志。如果我这样做,我不会崩溃。好像我不理解将委托(delegate)方法声明为可选的概念。你能告诉我我的错误在哪里吗?

* Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[EventViewController didLocateUser]: unrecognized selector sent to instance 0x1fb300'

最佳答案

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

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

顺便说一句,您已经使用 strong 创建了委托(delegate)属性语义。除非你有特别好的理由使用 strong , 委托(delegate)应该是 weak , 因为你的 Brain类不拥有它的委托(delegate)(如果你考虑对象图的话)。

关于ios - 未实现委托(delegate)方法导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9018764/

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