フォームシートスタイルで表示されるモーダルビューコントローラがあります。デリゲートプロトコルがあります。私はそのプロトコルを実装し、プレゼンテーションの前に代理人を割り当てていますが、プロパティが強力であるにもかかわらず、そのプロトコルは失われています。考えられる原因は大歓迎です。ありがとう!
これがプロパティ宣言です。
@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
コールバックが通過していません。これが、この探偵の仕事がどこで失われているのかを見つけるように促した理由です。