我的iPad应用程序出现了一个奇怪的问题(升级了iPhone应用程序)。
主要事实: - 这是一个基于UISplitVIew的应用程序。 - LeftView是一个NavigationController。 - RightVIew(detailView)也是一个NavigationController - 当用户在LeftView的RootView中选择一行时,我推送一个新的tableview,当用户在第二个tableview中选择一行时,我通过重新加载我需要的数据列表并调用[tableview reloadData]来更新detailView。 / p>
问题包括: 当用户在第二个tableview(leftview)中选择一行(无论如何)时,detailview会更新,当用户选择另一行(无论如何)时,detailview会正确更新,当用户选择第三行(无论如何)时应用程序崩溃没有在控制台上记录任何内容。
Insted,如果用户在第二个tableview(leftview)中选择一行(无论如何),然后返回到rootview,选择一行来推送第二个tableview并选择一行,然后返回到rootview,依此类推应用程序永远不会崩溃。
我疯了,可能是内存泄漏问题?
(我希望我的解释清楚,我是意大利人,我的英语不太好)
非常感谢你。 丹尼尔。
答案 0 :(得分:1)
在处理类似问题时,有一天朋友向我指出了这个链接:http://www.cocoadev.com/index.pl?NSZombieEnabled,这非常有帮助。
答案 1 :(得分:0)
objc_msgSend()是一个c函数,其中您的方法调用由ObjC运行时执行。当您在obj_msgSend()中看到EXC_BAD_ACCESS出现时,这意味着您在堆栈的前一帧中调用方法的对象无效。最有可能的是,它已被解除分配。
您对相关对象的内存管理存在问题。崩溃发生在 - [UITableView(UITableViewInternal)_createPreparedCellForGlobalRow:]的调用中,这是UITableView的内部方法。据推测,如果在已经解除分配的UITableView上调用此方法。您应该查看回溯以确定哪个表视图是已解除分配的表视图,然后查看该对象的内存管理。你可能过度释放它,或者不应该保留它。