gpt4 book ai didi

ios - 转换为使用 iOS 8 Popover Segues 时 UISplitViewController 崩溃

转载 作者:行者123 更新时间:2023-12-01 18:58:06 25 4
gpt4 key购买 nike

我有一个 UISplitViewController 是在 iOS 6/7 天从模板设置的。我试图隐藏它以使用新的 iOS 8 UISplitViewController 工具使我的应用程序能够在 iPhone 上运行。然而,我遇到的问题都发生在 iPad 2 模拟器上,使用 是值得的。 XCode 6 测试版 5 .

以前我使用此代码将所选项目项传递给详细信息 View :

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
self.detailViewController.detailItem = [[self fetchedResultsController] objectAtIndexPath:indexPath];
}

基于 iOS 8 的示例,这应该更改为 segue 以使其能够在不同的大小类和 UISplitViewControllerDisplayModes 中工作。所以我连接了我的单元作为源,我的详细导航 Controller 作为我的 segue 的目标,注释掉了 tableview:didSelectRowAtIndexPath上面一点,并实现了这个 prepareForSegue 代码:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"showDetail"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
self.detailViewController = (TWLDetailViewController *)[[segue destinationViewController] topViewController];
self.detailViewController.detailItem = [[self fetchedResultsController] objectAtIndexPath:indexPath];
}
}

第一次在我的主视图中选择一行时,一切似乎都按预期工作(我看到了详细 View ),但是我选择的下一个单元格导致试图解决一个已释放实例的崩溃,本质上是: *** -[DetailViewController respondsToSelector:]: message sent to deallocated instance 0x7a37a030 (我使用的是 ARC BTW,所以这里没有手工编码的保留/释放错误计数。)

我查了一些 similar issues在 SO 上,并尝试在 Instruments 中使用 Zombie profiler,如下所示(右键或控制单击图像并在新选项卡中查看它以查看它的全尺寸):

Instruments Stack Trace

您可以清楚地看到它正在尝试解决一个不可用的引用,因为“RefCt”变为零。我没有太多使用 Instruments 或类似调试工具的经验我不清楚我需要更改什么来解决这个问题,特别是因为它与 tableview:didSelectRowAtIndexPath 一起使用.

所以我的问题是:当我在明细项之间切换时,如何更改我的主代码或明细代码以正确解除分配?对于奖励积分,很高兴知道为什么使用以前的 tableview:didSelectRowAtIndexPath 可以正常工作但在segue上坠毁。如果您需要查看代码的其他部分或 Instruments 跟踪,请告诉我;我很乐意分享。

最佳答案

您必须在为 segue 做准备时设置 Split View Controller 委托(delegate):

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"showDetail"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
self.detailViewController = (TWLDetailViewController *)[[segue destinationViewController] topViewController];
self.detailViewController.detailItem = [[self fetchedResultsController] objectAtIndexPath:indexPath];
self.splitViewController.delegate = self.detailViewController;
}

}

还要在 didSelectRowAtIndexPath 中设置它:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
{
self.detailViewController = [[self.splitViewController.viewControllers lastObject] topViewController];
self.splitViewController.delegate = self.detailViewController;

}
}

关于ios - 转换为使用 iOS 8 Popover Segues 时 UISplitViewController 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25171401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com