0

分割の上部セクションにいくつかの質問が表示され、下部セクションにその他の項目が表示される分割ビューがあります。問題は、ユーザーが質問を選択するたびに新しいビューに「プッシュ」するように記述したことです。これは明らかに理想的とは言えません。なぜなら、ユーザーは、同じ質問を 15 回 (ユーザーが質問を選択した回数に応じて、多かれ少なかれ) コピーして戻ってくる状況に入る可能性があるからです。

簡単な解決策は、ユーザーが質問を選択したときに BOOL を設定することだと思っていましたが、結局のところ、これにより、ユーザーが質問を一度選択できるという新しいバグが発生しますが、戻ってしまうと運が悪くなります. 私はここで立ち往生しています。どんなガイダンスも大歓迎です。

プログラムの流れ:

まず、私がやろうとしていることについて少し理解する必要があります。私は、教師が生徒の歴史調査の学習をサポートできるようにすることに重点を置いた歴史調査アプリを構築しています。そのため、学生が分析できるドキュメントだけでなく、中心的な質問もあります。

アプリの開発方法に基づいて、JSLDetailViewController は主要な質問を表示し、JSL_QuestionInteraction はドキュメントを分析するための質問を表示します。

関連するコード スニペット:

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if(indexPath.section == 0){
        if(!didSelectQuestion){
            [self performSegueWithIdentifier:@"questionDisplaySegue" sender:indexPath];
            didSelectQuestion = TRUE;
        } else {
            JSLDetailViewController *detailView = [JSLDetailViewController alloc];
            detailView.telegram = indexPath.row;
            [detailView setDetailItem:indexPath];
        }
    }else if(indexPath.section == 1){
            [self performSegueWithIdentifier:@"telegramQuestionDisplaySegue" sender:indexPath];
            JSL_QuestionInteraction *questionView = [[JSL_QuestionInteraction alloc] init];
            questionView.managedObjectContext = self.managedObjectContext;
    }
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if([segue.identifier isEqualToString:@"questionDisplaySegue"]){
        JSLDetailViewController *detailView = (JSLDetailViewController *)segue.destinationViewController;
        detailView.telegram = index.row;
        [detailView setDetailItem:index];
        JSLDetailViewController *controller = (JSLDetailViewController *)segue.destinationViewController;
        controller.managedObjectContext = self.managedObjectContext;
    } else if ([segue.identifier isEqualToString:@"telegramQuestionDisplaySegue"]){
        JSL_QuestionInteraction *questionView = [[JSL_QuestionInteraction alloc] init];
        questionView.managedObjectContext = self.managedObjectContext;
    }
}

この問題を理解するために追加の詳細が必要な場合はお知らせください。

4

1 に答える 1

0

私はまだあなたの構造を本当に理解していないので、ここに書いたことがあなたの問題を解決するかどうかはわかりませんが、投稿されたコードにはいくつか間違っていることがわかります。

まず、セグエを実行しているときは、コードで何かを初期化するべきではありません。セグエは新しいコントローラーをインスタンス化します。didSelectRowAtIndexPath: の detailView で何をしているのかは明確ではありません。init なしで alloc を実行します。init なしで alloc を実行することは決してありません。その detailView がすでに画面に表示されているものである場合は、そのインスタンスへの参照を取得し、その上にテレグラムと detailItem を設定する必要があります。

prepareForSegue の「if」句では、segue.destinationViewController を 2 つの異なるローカル変数、detailView とコントローラに割り当てています。これらは両方とも同じものを指しているため、両方を持つ理由はありません。

「else」句では、もう一度割り当ててコントローラーを初期化しますが、これは行うべきではありません。代わりに、セグエの宛先ビュー コントローラーを取得することをお勧めします。

于 2013-03-24T23:47:11.200 に答える