【发布时间】:2011-03-09 16:05:36
【问题描述】:
任何帮助表示赞赏!这几天我都在战斗,没有结果。
场景:
我和 iPad 应用程序有一个 SplitViewController,它显示 2 个控制器视图(左侧为 Root,右侧为 Detail)
Root 允许递归导航(树可能是几个向下钻取级别),每次我都会调用相同的控制器类 (UITableView) 总是在控制器堆栈中推送)。当用户点击一个单元格(左侧)时,详细视图(右侧)会显示信息。 请记住,详细视图控制器并不总是同一个类:这意味着我正在根据我必须显示的信息类型以编程方式分配(和释放)几个详细视图控制器。
这里是片段:
UIViewController <ItemGenericViewController> *newDetailViewController = [[NSClassFromString(cntrClass) alloc] initWithNibName:cntrXib bundle:nil];
//the detailViewController has been defined in the head section as ItemGenericViewController
//each detailViewController is a subclass of ItemGenericViewController
detailViewController = newDetailViewController;
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:detailViewController];
// Update the split view controller's view controllers array.
NSArray *viewControllers = [[NSArray alloc] initWithObjects:self.navigationController, nav, nil];
self.splitViewController.viewControllers = viewControllers;
[nav release];
[viewControllers release];
[detailViewController release];
在出现内存警告之前一切正常。
从那一刻起,如果我尝试显示一个新的 detailViewcontroller,SplitViewController 中 RootController 和 detailController 之间的“连接”似乎消失了。结果是:splitController 的右侧没有出现任何内容。 同时,如果我在根控制器中导航到父级,情况仍然失败。
为了您的信息,每次我在堆栈中推送一个新的 RootController 实例(左列)时,我都会释放相同的控制器(像往常一样节省内存),我怀疑在收到内存警告后,iOS 正在尝试释放自己的记忆和我的“历史”消失了,相关的联系也通过拆分控制器消失了。
是一场噩梦 ;-)
你有什么建议吗?
谢谢
达里奥
【问题讨论】:
标签: objective-c ipad memory-management uinavigationcontroller uisplitviewcontroller