iOS代理了协议之后没法正常回调?

协议代理实现了其中的方法,而且打断点调试的时候也确认了delegate确实赋值上了self,但是实现的方法却没有执行。
最新回答
一花一树开

2024-09-21 10:14:54

关于代理不回调问题有以下几问题:
1. 没有设置代理 XXX.delegate = self 
2. 方法名写错 
3. 新方法得判断iOS版本 
4. 引用对象被释放了 
5. 具体功能info.plist配置错误 
6. 在block中设置有时会出现代理不回调问题(用通知代替)
错误1,2 :
对于错误1,2一般是很新的新手或者老手脑袋短路极不正常时犯的错误。
错误3 :
这个错误一般也可以忽略,因为使用高级API程序直接会崩溃。 错误4
引用对象呗释放了。
这个错误较之于上面三个有点难度,解决这个错误需要对内存管理有所了解.如果内存管理不好,这里也很容易出现EXC_BAD_ACCESS崩溃.所以检查对象的生命周期,代理要设置成全局变量,不要设置成局部变量。
代理设置使用weak,避免造成循环引用.而且要在dealloc方法中将代理设置为nil。
* 注意: 不要使用assign,因为assgin类型在使用结束后不会设置成nil,此时发消息的话会EXC_BAD_ACCESS。
错误5
这个问题是在处理特定功能时才能遇到的,不具有普遍性.比如使用CLLocationManager获取地理位置时不进代理的回调.你代理明明设置的很清楚,也遵循代理了,对象也没有被释放,但是代理就是不进,是不是很迷惑很纠结. 此时代理不进的另一个原因就是info.plist没有配置正确。
因为获取地理位置需要配置info.plist的属性: NSLocationAlwaysUsageDescription 或者NSLocationWhenInUseUsageDescription。
错误6
关于这个问题具体什么需求可以以后讨论一下,如果大家也遇到这个问题,这里可以作为一个小参考。
纸墨清香

2024-09-21 16:49:01

可以的是你没有把当前的控制器复制给代理