从AppDelegate我通过协议与MyViewController通信。所以当在AppDelegate.m中调用此方法时:
- (void)thisMethodGetsCalled:(CustomData *)data {
//Do stuff
//Then call method via Protocol
[_exampleDelegate exampleMethod:data];
}
它在MyViewController.m中调用此方法
- (void)thisMethodGetsCalledInsideViewController:(CustomData *)data {
//Do stuff with data
}
//ExampleDelegate.h
#import <Foundation/Foundation.h>
@protocol SMMessageDelegate <NSObject>
- (void)thisMethodGetsCalledInsideViewController:(CustomData *)data;
@end
一切正常,正如预测的那样“thisMethodGetsCalledInsideViewController”在“thisMethodGetsCalled”之后被调用。假设MyViewController从未被实例化,那么“thisMethodGetsCalledInsideViewController”永远不会被调用。但是,MyViewController被实例化,后来被解雇:
[self dismissViewControllerAnimated:YES completion:nil];
我的应用程序在调用“thisMethodGetsCalled”时崩溃。它试图调用“thisMethodGetsCalledInsideViewController”,但该方法驻留在被解除的MyViewController中。有人知道如何解决这个问题吗?
答案 0 :(得分:1)
首先想到: 在某处您将MyViewController设置为符合协议的对象的委托? 你必须要么:
当MyViewController被解除时,将委托值设置为nil,或
将delegate属性设置为弱引用,即
@property (nonatomic,assign) id<TheProtocol> delegate;
希望有所帮助。