我正在将一个相当简单的基于iPhone导航的应用程序移植到Split View iPad应用程序。我在主视图上有两个嵌套的导航级别。用户从第一个表中选择一个值,然后加载第二个表。在第二个表上选择一个值会加载详细信息视图的Detail项。我(终于)让那部分工作了。
但是,当我再次尝试拉出主视图时,无论是使用纵向弹出式菜单按钮还是只是导航回到它并单击横向视图中的记录,它都会崩溃:GDB:程序收到信号:“EXC_BAD_ACCESS”错误。我无法在代码中找到任何可以找到问题的地方。
我非常密切地关注SplitView模板。通过添加第二个TableViewController,我真的只是走出了人迹罕至的地方。我的RootViewController加载第二个TableViewController。
以下是代码:
首先,在RootViewController.m中我在第一个选择项目时加载第二个TableView(在didSelectRowAtIndexPath中):
RequestsTableViewController *requestsTableViewController=[[RequestsTableViewController alloc] initWithNibName:@"RequestsTableViewController" bundle:nil];
requestsTableViewController.selectedDepartmentID = self.selectedDepartmentID;
[self.navigationController pushViewController:requestsTableViewController animated:YES];
[requestsTableViewController release];
然后,在第二个TableViewController,RequestsTableViewController中,我根据didSelectRowAtIndexPath中的选择加载详细信息项:
TrackerSplitViewAppDelegate *appDelegate = (TrackerSplitViewAppDelegate *)[[UIApplication sharedApplication] delegate];
Request *aRequest = [appDelegate.requests objectAtIndex:indexPath.row];
appDelegate.detailViewController.thisRequest = aRequest;
appDelegate.detailViewController.detailItem = [NSString stringWithFormat:@"Row %d", indexPath.row];
[appDelegate release];
该应用加载并设置我的值,一切正常。只要我不点击细节,我就可以在两个TableViewControllers之间使用自动生成的导航进行导航。然而,一旦我点击了一个细节并加载了它,如果我尝试重新访问MasterView,我就会崩溃应用程序。 我没有对nib文件做任何事情来连接这个导航,它都是从iPhone应用程序移植(除此崩溃之外)。我找不到任何包含多个主视图的示例,以查看我的连接不同的地方。我怀疑我必须在界面构建器中调整某些东西,但由于我无法确切地说它崩溃的地方,我很难开始。或者我只需要在选择细节后以编程方式将原始视图重新推送到堆栈?这似乎是吝啬的。
答案 0 :(得分:3)
[appDelegate release];
除非您保留appDelegate,否则不应释放它。你还没有做到这一点。所以摆脱这条线。