iOS协议 - 代表始终为零
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS协议 - 代表始终为零相关的知识,希望对你有一定的参考价值。
我有两个控制器。一个BaseViewController和MyController。在BaseViewController上,我将属性作为具有协议的NSObject
BaseViewController.h
@property (nonatomic, strong) MyListener *myListener;
MyListener.h
@protocol MyListenerProtocol;
@interface MyListener : NSObject
@property (nonatomic, weak) id<MyListenerProtocol> delegate;
@end
@protocol MyListenerProtocol;
@protocol MyListenerProtocol <NSObject>
@optional
-(void) myMethod: (int) input;
@end
MyController扩展了BaseViewController
@interface MyController : BaseViewController <MyListener>
并在它的viewDidLoad:
super.myListener = [[MyListener alloc] init];
super.myListener.delegate = self;
在一个方法的BaseViewController中,当它被调用时:
if (self.myListener && [self.myListener.delegate respondsToSelector:@selector(myMethod:)]) {
[self.myListener.delegate myMethod: input];
}
但在这一点上,“self.myListener”总是为零。
我想要的是在调用BaseViewController的方法时调用子视图控制器中的方法(但仅限于某些子视图控制器,而不是所有子视图控制器)。
有什么建议?
请为名为delegate的属性实现自定义getter,正常设置并在那里设置断点。这样您就可以找到问题的原因。
此外,请注意,只要没有其他对象指向您设置为委托的对象,弱属性就会消失。
最可能的原因(以及一个疯狂的常见原因)是你的BaseViewController
方法在viewDidLoad
之前被调用。你验证过这不是这种情况吗?
作为一个注释,你的意思是self
在你放置super
的所有地方。
另请注意,在这一行:
if (self.myListener && [self.myListener.delegate respondsToSelector:@selector(myMethod:)]) {
没有理由self.myListener &&...
如果self.myListener
是nil
,其余的通话将自动变为假。
你应该告诉MyController它使用的委托,但你告诉错误的名字。
@interface MyController : BaseViewController <MyListener>
改成:
@interface MyController : BaseViewController <MyListenerProtocol>
在prepareForSegue
方法中设置委托。
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
LastNameViewController *lastNameViewController = [segue destinationViewController];
lastNameViewController.delegate = self;
}
以上是关于iOS协议 - 代表始终为零的主要内容,如果未能解决你的问题,请参考以下文章
iOS8 的 UIAlertController 标题始终为零
CLLocationCoordinate2D 纬度和经度始终为零
HKMetadataKeyTimeZone 对于由苹果的 Health App - HealthKit - iOS 创建的健康数据始终为零
HKMetadataKeyTimeZone 对于由苹果的 Health App - HealthKit - iOS 创建的健康数据始终为零
iOS 7.1 是不是破坏了 4S iBeacon 支持? Proximity 在 4S 上始终为 CLProximityUnknown,RSSI 始终为零。请帮忙,在 beta 测试中