Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
随机UISearchDisplayController崩溃(iOS 7)_Ios_Uitableview_Ios7_Uisearchbar_Uisearchdisplaycontroller - Fatal编程技术网

随机UISearchDisplayController崩溃(iOS 7)

随机UISearchDisplayController崩溃(iOS 7),ios,uitableview,ios7,uisearchbar,uisearchdisplaycontroller,Ios,Uitableview,Ios7,Uisearchbar,Uisearchdisplaycontroller,我一直在试图修复一个崩溃,大约50%的用户都有这个问题。崩溃是在我实现了一个UISearchDisplayController(即,在表视图中添加了一个搜索栏)之后开始的,但我无法重现崩溃,甚至一次也没有。根据我的用户,当他们打开包含UISearchDisplayController的表视图时,会立即崩溃(或冻结) 根据Crashlytics,坠机发生在: -[UISearchDisplayController _updateTableHeaderBackgroundViewInTableVie

我一直在试图修复一个崩溃,大约50%的用户都有这个问题。崩溃是在我实现了一个UISearchDisplayController(即,在表视图中添加了一个搜索栏)之后开始的,但我无法重现崩溃,甚至一次也没有。根据我的用户,当他们打开包含UISearchDisplayController的表视图时,会立即崩溃(或冻结)

根据Crashlytics,坠机发生在:

-[UISearchDisplayController _updateTableHeaderBackgroundViewInTableView:amountScrolledUnder:]
我以编程方式创建了UITableView,但我主要通过IB添加了UISearchBar/UISearchDisplayController

关于崩溃所指的“表头背景视图”,我之前做了两件事。首先,我将表视图背景视图设置为零:

[self.tableView setBackgroundView:nil];
其次,我也在这样做:

- (NSString *)tableView:(UITableView *)aTableView titleForHeaderInSection:(NSInteger)section
{
    if (aTableView != nil && self.searchDisplayController != nil)
    {
        if (self.searchDisplayController.isActive)
        {
            return nil;
        }
        else
        {
            return [super sectionAtIndex:section].headerTitle;
        }
    }
    else
    {
        return [super sectionAtIndex:section].headerTitle;
    }
}
此后,我将背景视图更改为帧大小为CGZero的强UIView,这意味着我刚刚在背景中添加了一个强空视图。 另外,在第二段代码中,我没有返回nil,而是返回一个空字符串@“”

我还没有将这些更改推送到我的用户,因为我想在这样做之前确定一下。试图在谷歌上搜索UISearchDisplayController函数,但没有找到任何东西,所以我猜这是iOS 7特有的问题,这使得追踪更加困难,特别是因为我无法复制它

无论如何,我希望有人自己也经历过这种问题,或者有人知道是什么导致了这种情况

更新:下面是全面崩溃

Thread : Crashed: com.apple.main-thread
0  libobjc.A.dylib                0x0000000191f179d0 objc_msgSend + 16
1  UIKit                          0x0000000188f63820 -[UISearchDisplayController _updateTableHeaderBackgroundViewInTableView:amountScrolledUnder:] + 164
2  UIKit                          0x0000000188f63394 -[UISearchBar _didMoveFromWindow:toWindow:] + 312
3  UIKit                          0x0000000188e6e42c -[UIView(Internal) _didMoveFromWindow:toWindow:] + 684
4  UIKit                          0x0000000188e9280c -[UIScrollView _didMoveFromWindow:toWindow:] + 68
5  UIKit                          0x0000000188e6dba0 __45-[UIView(Hierarchy) _postMovedFromSuperview:]_block_invoke + 148
6  UIKit                          0x0000000188e6d998 -[UIView(Hierarchy) _postMovedFromSuperview:] + 292
7  UIKit                          0x0000000188e7c4ec -[UIView(Internal) _addSubview:positioned:relativeTo:] + 1628
8  UIKit                          0x000000018906af44 -[_UIParallaxDimmingView didMoveToWindow] + 144
9  UIKit                          0x0000000188e6e768 -[UIView(Internal) _didMoveFromWindow:toWindow:] + 1512
10 UIKit                          0x0000000188e6e42c -[UIView(Internal) _didMoveFromWindow:toWindow:] + 684
11 UIKit                          0x0000000188e6dba0 __45-[UIView(Hierarchy) _postMovedFromSuperview:]_block_invoke + 148
12 UIKit                          0x0000000188e6d998 -[UIView(Hierarchy) _postMovedFromSuperview:] + 292
13 UIKit                          0x0000000188e7c4ec -[UIView(Internal) _addSubview:positioned:relativeTo:] + 1628
14 UIKit                          0x000000018906a67c __53-[_UINavigationParallaxTransition animateTransition:]_block_invoke + 1636
15 UIKit                          0x0000000188e82bb8 +[UIView(Animation) performWithoutAnimation:] + 88
16 UIKit                          0x0000000189069d54 -[_UINavigationParallaxTransition animateTransition:] + 828
17 UIKit                          0x0000000189022078 -[UINavigationController _startCustomTransition:] + 2724
18 UIKit                          0x0000000188f2c794 -[UINavigationController _startDeferredTransitionIfNeeded:] + 464
19 UIKit                          0x0000000188f2c564 -[UINavigationController __viewWillLayoutSubviews] + 56
20 UIKit                          0x0000000188f2c4e4 -[UILayoutContainerView layoutSubviews] + 200
21 UIKit                          0x0000000188e6ed78 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 348
22 QuartzCore                     0x0000000188a6b0cc -[CALayer layoutSublayers] + 184
23 QuartzCore                     0x0000000188a65c94 CA::Layer::layout_if_needed(CA::Transaction*) + 300
24 QuartzCore                     0x0000000188a65b4c CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 32
25 QuartzCore                     0x0000000188a653d4 CA::Context::commit_transaction(CA::Transaction*) + 280
26 QuartzCore                     0x0000000188a65178 CA::Transaction::commit() + 424
27 QuartzCore                     0x0000000188a5ea30 CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 80
28 CoreFoundation                 0x0000000185f5f7e0 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32
29 CoreFoundation                 0x0000000185f5ca68 __CFRunLoopDoObservers + 372
30 CoreFoundation                 0x0000000185f5cdf4 __CFRunLoopRun + 764
31 CoreFoundation                 0x0000000185e9db38 CFRunLoopRunSpecific + 452
32 GraphicsServices               0x000000018b8c3830 GSEventRunModal + 168
33 UIKit                          0x0000000188edc0e8 UIApplicationMain + 1156
34 Flash Reader                   0x00000001000904dc main + 17 (main.m:17)
35 libdyld.dylib                  0x0000000192507aa0 start + 4
更新2: 这似乎只发生在iphone5s上,这也解释了为什么我无法重现这一点。我觉得这与这段代码有关:

CGRect newBounds = self.tableView.bounds;
    if (self.tableView.bounds.origin.y < 44)
    {
        newBounds.origin.y = newBounds.origin.y + self.searchDisplayController.searchBar.bounds.size.height;
        self.tableView.bounds = newBounds;
    }
    // new for iOS 7
    if (self.tableView != nil && self.staticContentSections.count > 0)
    {
        [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0] atScrollPosition:0 animated:YES];
    }
更新3
嗯,这并没有解决问题。这种情况仍然在发生,无论是随机发生的,还是每次当用户使用iphone5s时。它不会发生在5S模拟器中,但我无法进一步调试它,因为我没有5S。我开始认为这是一个iOS 7错误,而不是应用程序本身的错误。

我在iOS 8.0中遇到了崩溃。我通过在视图控制器的dealloc(deinit)中设置
searchBar.delegate=nil来修复它。

您需要尝试重现它并获得更好的堆栈跟踪-否则这只是猜测:)随机冻结听起来像内存问题-您是否尝试配置应用程序,使用analyzer?尤其是当你们打开搜索视图的时候?我所说的随机,是指据我所知,它发生在随机用户身上。我还可以从Crashlytics中看到,这些用户有足够的内存/应用程序没有使用太多内存,因此我不完全确定这是内存问题。不过,我会继续分析应用程序。我用堆栈跟踪更新了原始帖子。你也在使用ARC吗?
self.edgesForExtendedLayout = UIRectEdgeNone;
self.tableView.contentOffset = CGPointMake(0, 44);