ios – 未实现的委托方法导致崩溃

前端之家收集整理的这篇文章主要介绍了ios – 未实现的委托方法导致崩溃前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我创建了一个协议并将其分配给一个委托对象
@protocol AppBrainDelegate <NSObject>
@optional
- (void)didLocateUser;
- (void)didFinishLoadingDataWithData:(NSDictionary *)fetchedData;
@end

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

我认为这个@optional在协议声明中的含义意味着控制器不必听代理方法,如果他们不想.

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

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

解决方法

如果方法未在符合协议的类中实现,那么@optional只会抑制编译器警告.在调用委托方法之前,您仍然需要检查委托实现它:
if ([delegate respondsToSelector:@selector(didLocateUser)]) {
    [delegate didLocateUser];
}

顺便提一句,你已经使用强大的语义创建了你的委托属性.除非你有一个特别好的理由使用强大的,代表应该是软弱的,因为你的Brain类不拥有它的代理(如果你考虑对象图).

猜你在找的iOS相关文章