如何在不创建相同视图的重复版本的情况下返回视图?

时间:2013-03-24 00:58:29

标签: ios uisplitviewcontroller segue

我有一个拆分视图,其中我的拆分的顶部显示了一些问题,底部显示了一些其他的东西。问题在于,每次用户选择问题时,我都会将其写入“推送”到新视图。这显然不太理想,因为用户可以输入他们有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;
    }
}

如果您需要任何其他详细信息以了解此问题,请与我们联系。

1 个答案:

答案 0 :(得分:0)

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

首先,当你进行segues时,你不应该在代码中分配init'ing任何东西,segue会为你实例化新的控制器。目前还不清楚你在didSelectRowAtIndexPath中使用detailView做了什么,你做了一个没有init的alloc - 你应该从不做一个没有init的alloc。如果detailView已经出现在屏幕上,那么你应该获得对该实例的引用,并在其上设置telegram和detailItem。

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

在“else”子句中,你的alloc再次启动一个控制器,你不应该这样做。你可能想要获得segue的目标视图控制器。