- 締切済み
iPhoneアプリ 画面遷移での変数受け渡し
現在、iPhoneアプリの開発を勉強している者です。 少し詰まってしまった箇所があるので、ご教授いただけると幸いです。 TableViewController間での変数の受け渡しを実装しており、1枚目のTableViewでタップされたセルのテキストを2枚目に渡す、というコードを書きました。 受け渡しに関するコードは以下の部分です。 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [self performSegueWithIdentifier:@"mySegue" sender:self]; } -(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([[segue identifier] isEqualToString:@"mySegue"]) { SecondTableViewController *viewCon = segue.destinationViewController; NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; viewCon.myValue = cell.textLabel.text; } } これ自体は問題なく動いてくれたのですが、SecondTableViewControllerにNavigationControllerをEmbed Inしたところ、1枚目でセルをタップした際にエラーが出てアプリが止まってしまうようになりました。 BreakPointを設けてみると上記コードのviewCon.myValue = cell.textLabel.text;のところで止まっており、unrecognized selector sent to instanceというエラーが吐き出されていました。 同様のエラーが出た例などを調べてみたのですが自力では解決できず・・・、どなたか原因を指摘して頂けるとありがたいです。 よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Lchan0211b
- ベストアンサー率61% (573/930)
NavigationControllerをEmbed Inしたんだったら、 segue.destinationViewControllerで得られるビューコントローラーは、 NavigationControllerです。 SecondTableViewControllerは、そのNavigationController配下の topViewControllerに配置されます。 つまり、 SecondTableViewController *viewCon = segue.destinationViewController; の部分を UINavigationController *naviCon = segue.destinationViewController; SecondTableViewController *viewCon = (SecondTableViewController *)naviCon.topViewController; のようにする必要があります。
お礼
詳しくありがとうございます。 なるほど・・・その通りですね。不勉強で、NavigationControllerの構造をきちんと理解できていませんでした。 教えていた通りに実装したらうまく動いてくれました。 ありがとうございました!