私の本当の問題は、モーダルセグエによってストーリーボードのchildViewControllerからparentViewControllerにデータを渡したいことです。
コード
parentViewController.h
@property (strong, nonatomic)NSMutableArray *address;
childViewController.m
parentViewController *parent=(parentViewController *)self.presentingViewController;
post.address=@"Hello World";
このコードは次のような例外をスローします
キャッチされなかった例外 'NSInvalidArgumentException'が原因でアプリを終了しています、理由: '-[MainTabbarViewController setAddress:]:認識されないセレクターがインスタンス0x7fa070e6b910に送信されました'
ストーリーボード構造
TabbarController-> NavigationController-> parentViewController-> childViewController
前もって感謝します。
あなたを作成したセグエへの参照を取得する方法はありません。宛先コントローラーでプロパティ(私の例ではsourceVC)を作成し、(ソースビューコントローラーの)prepareForSegueメソッドでこのプロパティに自分自身を割り当てることができます。
[(ChildViewController *)segue.destinationViewController sourceVC] = self;
とにかく、デリゲートを使用する方が良い解決策だと思います。
* ChildViewController.h内*
@protocol ChildDelegate <NSObject>
- (void)postAddress:(NSString*)ad;
@end
@interface ChildViewController : UIViewController
@property (weak, nonatomic) id <ChildDelegate> delegate;
@end
* ParentViewController.h内*
@interface ParentViewController : UIViewController <ChildDelegate>
@end
* ParentViewController.m内*
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
ChildViewController *vc = [segue destinationViewController];
vc.delegate = self;
}
* ChildViewController.m内*
- (void)changeAddress:(NSString*)ad
{
if ([self.delegate respondsToSelector:@selector(postAddress:)])
{
// Tell the delegate something.
[self.delegate postAddress:@"New Address"];
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加