我有一个以表单样式显示的模式视图控制器。它有一个委托协议。我正在实现该协议并在演示之前分配一个委托,但即使该属性很强大,它也会丢失。欢迎任何可能的原因。谢谢!
这是属性声明,一样强。
@protocol SDStoreViewDelegate <NSObject>
// Methods
@end
@interface SDStoreViewController : UIViewController
@property (strong, nonatomic) id <SDStoreViewDelegate> delegate;
@end
这是创建对象和设置委托的地方。
SDStoreViewController *store = [[SDStoreViewController alloc] init];
[store setDelegate:self];
NSLog(@"1 %@",store.delegate); // Returns Object as expected
[self presentViewController:store animated:YES completion:^{
NSLog(@"3 %@",store.delegate); // Returns Object as expected
}];
NSLog(@"4 %@",store.delegate); // Returns Object as expected
这是 SDStoreViewController 的 viewDidLoad。它已经失去了它的代表
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"3 %@",_delegate); // Returns NULL
}
这是解雇只是因为委托被称为它不是NULL。
- (void)dismiss:(id)sender
{
NSLog(@"5 %@",_delegate); // Returns NULL
[self.delegate aMethod];
}
更新
我已经使用了weak
和strong
引用。我也使用了self.delegate
和_delegate
来访问该属性。作为一点,aMethod
回调没有通过,这促使这项侦探工作找到了它迷路的地方。