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.myListenernil,其余的通话将自动变为假。

另一答案

你应该告诉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 测试中