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

我不知道我在这里写的任何内容是否能解决您的问题,因为我仍然不太了解您的结构,但是我在您发布的代码中发现了一些错误。

首先,当你在做 segue 时,你不应该在代码中分配任何东西,segue 会为你实例化新的控制器。目前尚不清楚您在 didSelectRowAtIndexPath: 中使用 detailView 做什么,您在没有 init 的情况下执行了分配 - 您永远不应该在没有 init 的情况下执行分配。如果该 detailView 已经出现在屏幕上,您应该获取对该实例的引用并在其上设置电报和 detailItem。

在 prepareForSegue 的“if”子句中,您将 segue.destinationViewController 分配给两个不同的局部变量 detailView 和控制器——它们都指向同一事物,因此没有理由同时使用它们。

在“else”子句中,再次分配你的控制器,这是你不应该做的。您可能想要获取 segue 的目标视图控制器。

于 2013-03-24T23:47:11.200 回答