-2

我目前正在开发一个应用程序,该应用程序具有一些带有按钮的 ViewController,该按钮可以推送到带有搜索栏和搜索显示控制器的 UITableViewController。我在单元格中有一些数据并且会被填充。我添加了以下代码来隐藏搜索栏,并在您看到它时使其变得清晰:

[[self.searchBar.subviews objectAtIndex:0] removeFromSuperView];
[self.searchBar setBackgroundColor:[UIColor clearColor]];
CGRect newBounds = [[self tableView]bounds];
newBounds.origin.y = newBounds.origin.y + searchBar.bounds.size.height;
[[self tableView] setBounds:newBounds];

现在这在我使用 iOS 模拟器时有效,但是当我在我的设备上运行它并开始向上或向下滚动时,它会崩溃并给我以下错误:

EXC_BREAKPOINT (code = EXC_ARM_BREAKPOINT, subcode = 0xdefe)

然后我启用 Zombie Objects 来进一步调试并得到这个:

-[UIView frame]: message sent to deallocated instance 0x156b1430

当我起飞时:

[[self.searchBar.subviews objectAtIndex:0] removeFromSuperView];
[self.searchBar setBackgroundColor:[UIColor clearColor]];

并再次在我的设备上运行我的应用程序,它不会崩溃并且工作正常。

任何人都知道发生了什么以及这是如何发生的?提前致谢!

4

3 回答 3

0

我遇到了同样的问题。转到此页面,阅读问题中的“僵尸对象”一词,并记得我已启用僵尸对象。禁用它们后,问题就消失了。现在,当我滚动我的 tableView 时,没有崩溃。

这可能很奇怪,但也许它会帮助某人......

于 2014-04-19T17:58:39.867 回答
0
    [[self.searchBar.subviews objectAtIndex:0] removeFromSuperView]; 

    //This Line remove search bar from view ,which means it is deallocated at that moment so when you again try to remove it ,,the app crash ..
  //  So,instead of this try to hide searchbar ,,

    Self. searchBar.hidden =YES;
于 2013-09-05T04:12:22.340 回答
0

我认为 UISearchBar 有 unsafeunretained 参考[self.searchBar.subviews objectAtIndex:0];

然后您设置 Bounds 的UITableView然后更改框架UITableView。它会触发自动调整大小和layoutSubviews.

因此,UISearchBar 的 layoutSubviews 方法访问[self.searchBar.subviews objectAtIndex:0].frame 布局或自动调整大小。

不建议UIControls从 SDK 更改视图。有一个想法是设置hidden=YES代替removeFromSuperview

于 2013-09-05T05:26:18.043 回答