gpt4 book ai didi

ios - 使用 VoiceOver 在多个 UITableView 之间切换会导致崩溃

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:16:33 25 4
gpt4 key购买 nike

我有一个具有以下 View 层次结构的 UIViewController:

    UIView (root of UIViewController)
|__________
| |
UITableView(A) UIView (overlay view)
____|_______
| |
UITableView(B) UITableView(C)

没有一个 UITableViews 是同时显示的——出于各种原因,我只是在它们之间切换:一个用于普通项目,一个用于搜索结果,等等。

通过打开 VoiceOver,导致 UITableView B 出现,关闭它,然后在 >UITableView A.

这是调用堆栈:

Thread : Crashed: com.apple.main-thread
0 libobjc.A.dylib 0x00000001954a7bd0 objc_msgSend + 16
1 UIKit 0x000000018317ea68 -[UITableViewCellAccessibility _accessibilityReuseChildren:forMockParent:] + 496
2 UIKit 0x000000018318f28c -[UITableViewCellAccessibilityElement tableViewCell] + 260
3 UIKit 0x000000018318fcac -[UITableViewCellAccessibilityElement isAccessibilityElement] + 24
4 UIAccessibility 0x0000000191c2c030 _appendChildrenToArrayStartingAtIndexWithChildren + 352
5 UIAccessibility 0x0000000191c2bd04 _addAXElementsToArrayFromObject + 1620
6 UIAccessibility 0x0000000191c2b680 _appendVendedAXElementsFromUIElements + 288
7 UIAccessibility 0x0000000191c2b53c _createAXUIElementsFromUIElements + 160
8 UIAccessibility 0x0000000191c2a3cc _copyParameterizedAttributeValueCallback + 208
9 AXRuntime 0x000000018a5f4a30 _AXXMIGCopyParameterizedAttributeValue + 256
10 AXRuntime 0x000000018a5f0850 _XCopyParameterizedAttributeValue + 412
11 AXRuntime 0x000000018a5fbbc0 mshMIGPerform + 272
12 CoreFoundation 0x0000000184cf6200 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 56
13 CoreFoundation 0x0000000184cf6160 __CFRunLoopDoSource1 + 436
14 CoreFoundation 0x0000000184cf40e0 __CFRunLoopRun + 1640
15 CoreFoundation 0x0000000184c210a4 CFRunLoopRunSpecific + 396
16 GraphicsServices 0x000000018ddc35a4 GSEventRunModal + 168
17 UIKit 0x00000001895563c0 UIApplicationMain + 1488
18 Stack Exchange 0x000000010018dbe4 main (main.m:16)
19 libdyld.dylib 0x0000000195b02a08 start + 4

崩溃错误是:

[UITableTextAccessibilityElement accessibilityContainer] 消息发送到解除分配的实例

我在 iOS 8.1.2 上运行。

显然,这与 VoiceOver 有关,或者更确切地说,与 UIAccessibility 浏览其辅助功能元素的方式有关,试图访问已释放的对象。在隐藏和显示 UITableViewaccessibility 知道屏幕变了,但没有任何运气。

我的 UITableView 的 A 和 C 也有一些额外的 subview ,用作刷新/加载更多控件,但即使删除它们也无济于事。

更新:当我使用 VoiceOver 点击 UITextField 时,我也收到了这些警告,它是 UITableView< 的 subview (a) headerView 属性:

**** Accessibility: Could not find a valid index for <SESearchBar: 0x16a03150; frame = (0 0; 320 44); text = ''; layer = <CALayer: 0x16a02fc0>> in -[UITableView indexOfAccessibilityElement:]
|warning| **** Accessibility: Could not find where <SESearchBar: 0x16a03150; frame = (0 0; 320 44); text = ''; layer = <CALayer: 0x16a02fc0>> starts. Was its parent [<UITableView: 0x16208a00; frame = (0 0; 320 504); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x16b4a8c0>; layer = <CALayer: 0x16b49750>; contentOffset: {0, 0}; contentSize: {320, 1800}>] set correctly or did it disappear?

最佳答案

我在我的项目中遇到了类似的问题。经过几个小时的调试,我发现了问题所在。事实证明,VoiceOver 崩溃是由于一些空的(空的,没有任何标签/图像/等等)表格 View 单元格(我使用空单元格作为特定部分中选定单元格周围的额外间距分隔符)。在我删除这些单元格中的辅助功能元素后,崩溃也消失了......也许这对你的情况也有帮助。

- (NSInteger)accessibilityElementCount {
return 0;
}

- (NSArray *)accessibilityElements {
return nil;
}

关于ios - 使用 VoiceOver 在多个 UITableView 之间切换会导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27787415/

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