XCode8、Swift 2.3 - 将 reusableCellWithIdentifier 出队,并在 Accessibility Inspector 上中断
XCode8, Swift 2.3 - dequeue reusableCellWithIdentifier breaking with Accessibility Inspector on
Device/Environment 信息:我 运行 在 XCode 8 GM 的 MBP 上,在 Swift 2.3 上构建 iPad Air 2 模拟器运行 iOS 9.2。同样的行为出现在其他模拟器上,并没有出现在 XCode 7.
更奇怪的是,在第一次失败之前我已经连续四次通过了这个测试,并且此后一直失败 (n>20)。我不确定发生了什么变化,因为我正在处理不同的问题,但我可以合理地清除 DerivedData and/or Pods 然后重建。
在应用程序中,有一个 CommentsViewController 以完全标准的方式使 CommentsTableViewCells 出队,并使用注册到用于使单元格出队的变量 (reuseIdentifier
) 的笔尖。此文件在相当长的时间内没有更改。
这是笔尖的注册:
[self.tableView registerNib:[UINib nibWithNibName:@"CommentsTableViewCell" bundle:nil] forCellReuseIdentifier:reuseIdentifier];
这是 TableViewCell 的出列:
CommentsTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier forIndexPath:indexPath];
当运行应用程序正常时,一切都很好。但是,如果要求 XCUITest 框架拍摄 UI 层次结构的快照,或者在模拟器中打开了辅助功能检查器,并且与出列的单元格进行了交互,则应用程序会崩溃并显示以下内容日志中的消息,删除了应用程序的名称:
Assertion failure in -[UITableView dequeueReusableCellWithIdentifier:forIndexPath:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3512.30.14/UITableView.m:6564
2016-09-12 16:22:28.666 [26852:512611] * Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unable to dequeue a cell with identifier Comment - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'
* First throw call stack:
(
0 CoreFoundation 0x000000010a323e65 exceptionPreprocess + 165
1 libobjc.A.dylib 0x0000000109d9cdeb objc_exception_throw + 48
2 CoreFoundation 0x000000010a323cca +[NSException raise:format:arguments:] + 106
3 Foundation 0x0000000104c534de -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 198
4 UIKit 0x0000000107b11a8d -[UITableView dequeueReusableCellWithIdentifier:forIndexPath:] + 266
5 UIKit 0x0000000119bd41ba -[UITableViewAccessibility dequeueReusableCellWithIdentifier:forIndexPath:] + 183
6 0x0000000101ae1766 -[CommentsViewController tableView:cellForRowAtIndexPath:] + 214
7 UIKit 0x0000000107b24e43 -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 766
8 UIKit 0x0000000107b24f7b -[UITableView _createPreparedCellForGlobalRow:willDisplay:] + 74
9 UIKit 0x0000000107af9a39 -[UITableView _updateVisibleCellsNow:isRecursive:] + 2996
10 UIKit 0x0000000107b0b930 -[UITableView _visibleCells] + 27
11 UIKit 0x0000000119bd361a -[UITableViewAccessibility accessibilityElementsHidden] + 197
12 MapKitFramework 0x000000011bd8d2a1 -[MKUITableViewAccessibility accessibilityElementsHidden] + 64
13 UIAccessibility 0x0000000119d4c103 -[UIView(UIAccessibilityPrivate) _accessibilityViewIsVisibleIgnoringAXOverrides:] + 74
14 UIAccessibility 0x0000000119d2838e -[UIView(UIAccessibilityElementTraversal) _accessibilityShouldBeProcessed:] + 32
15 UIAccessibility 0x0000000119d277fd -[UIView(UIAccessibilityElementTraversal) _accessibilitySubviewsForGettingElementsWithOptions:] + 1950
16 UIAccessibility 0x0000000119d27ce8 -[UIView(UIAccessibilityElementTraversal) _addAccessibilityElementsAndOrderedContainersWithOptions:toCollection:] + 632
17 UIAccessibility 0x0000000119d27d5a -[UIView(UIAccessibilityElementTraversal) _addAccessibilityElementsAndOrderedContainersWithOptions:toCollection:] + 746
18 UIAccessibility 0x0000000119d27d5a -[UIView(UIAccessibilityElementTraversal) _addAccessibilityElementsAndOrderedContainersWithOptions:toCollection:] + 746
19 UIAccessibility 0x0000000119d27d5a -[UIView(UIAccessibilityElementTraversal) _addAccessibilityElementsAndOrderedContainersWithOptions:toCollection:] + 746
20 UIAccessibility 0x0000000119d27d5a -[UIView(UIAccessibilityElementTraversal) _addAccessibilityElementsAndOrderedContainersWithOptions:toCollection:] + 746
21 UIAccessibility 0x0000000119d27d5a -[UIView(UIAccessibilityElementTraversal) _addAccessibilityElementsAndOrderedContainersWithOptions:toCollection:] + 746
22 UIAccessibility 0x0000000119d27d5a -[UIView(UIAccessibilityElementTraversal) _addAccessibilityElementsAndOrderedContainersWithOptions:toCollection:] + 746
23 UIAccessibility 0x0000000119d28178 +[UIView(UIAccessibilityElementTraversal) _accessibilityElementsAndContainersDescendingFromViews:options:sorted:] + 399
24 UIAccessibility 0x0000000119d28570 -[UIApplication(UIAccessibilityElementTraversal) _accessibilityViewChildrenWithOptions:referenceWindow:] + 116
25 UIKit 0x0000000119bc8765 -[UIApplicationAccessibility _accessibilitySummaryElement] + 90
26 UIKit 0x0000000119bc5d51 -[UIApplicationAccessibility _accessibilityResponderElement:] + 1852
27 UIKit 0x0000000119c0b939 -[UIResponder(UITextAccessibilityUtilities) _accessibilityHasTextOperations] + 31
28 UIAccessibility 0x0000000119d3546d -[NSObject(AXPrivCategory) accessibilityAttributeValue:] + 4378
29 UIAccessibility 0x0000000119d4ee9d _accessibilityAttributesForObject + 333
30 UIAccessibility 0x0000000119d4ea77 -[NSObject(UIAccessibilityAutomation) _accessibilityUserTestingSnapshotDescendantsWithAttributes:maxDepth:maxChildren:maxArrayCount:] + 553
31 UIAccessibility 0x0000000119d4fa1a -[NSObject(UIAccessibilityAutomation) _accessibilityUserTestingSnapshotWithOptions:] + 594
32 UIAccessibility 0x0000000119d3308f -[NSObject(AXPrivCategory) accessibilityAttributeValue:forParameter:] + 3533
33 UIAccessibility 0x0000000119d20393 _copyParameterizedAttributeValueCallback + 176
34 AXRuntime 0x0000000119db2529 _AXXMIGCopyParameterizedAttributeValue + 312
35 AXRuntime 0x0000000119dad02f _XCopyParameterizedAttributeValue + 466
36 AXRuntime 0x0000000119dba3a7 mshMIGPerform + 235
37 CoreFoundation 0x000000010a24fca9 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION + 41
38 CoreFoundation 0x000000010a24fc19 __CFRunLoopDoSource1 + 473
39 CoreFoundation 0x000000010a245390 __CFRunLoopRun + 2272
40 CoreFoundation 0x000000010a244828 CFRunLoopRunSpecific + 488
41 GraphicsServices 0x000000010cab5ad2 GSEventRunModal + 161
42 UIKit 0x00000001079cb610 UIApplicationMain + 171
43 0x0000000101883f2a main + 2234
44 libdyld.dylib 0x000000010aef292d start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
这很尴尬,因为我有一些今天早上通过的测试现在没有通过。我已经搜索过类似的问题,但它们都至少有几年的历史了,答案围绕 UI 不存在的 Nibs 或 IB 的问题或涉及 IB UI 的解决方法不再存在的组件(好吧,或者假设笔尖未注册)。
所以,我的问题是,为什么仅当辅助功能层次结构与 交互时才会崩溃,我该如何修复它,以便我的测试可以恢复工作吗?
您是否尝试将 [self.tableView registerNib:[UINib nibWithNibName:@"CommentsTableViewCell" bundle:nil] forCellReuseIdentifier:reuseIdentifier];
中的 nil
更改为 [NSBundle mainBundle]
?
检查你的 [self.tableView registerNib:[UINib nibWithNibName:@"CommentsTableViewCell" bundle:nil] forCellReuseIdentifier:reuseIdentifier];
在 cellForRowAtIndexPath
之前执行。
在我的例子中,cellForRowAtIndexPath
在 viewDidLoad
之前被调用。
这已在最新的 XCode 8.1 Beta 中与 10.1 模拟器一起修复,因此 "How can I fix it" 的答案原来是 "Wait"。
Device/Environment 信息:我 运行 在 XCode 8 GM 的 MBP 上,在 Swift 2.3 上构建 iPad Air 2 模拟器运行 iOS 9.2。同样的行为出现在其他模拟器上,并没有出现在 XCode 7.
更奇怪的是,在第一次失败之前我已经连续四次通过了这个测试,并且此后一直失败 (n>20)。我不确定发生了什么变化,因为我正在处理不同的问题,但我可以合理地清除 DerivedData and/or Pods 然后重建。
在应用程序中,有一个 CommentsViewController 以完全标准的方式使 CommentsTableViewCells 出队,并使用注册到用于使单元格出队的变量 (reuseIdentifier
) 的笔尖。此文件在相当长的时间内没有更改。
这是笔尖的注册:
[self.tableView registerNib:[UINib nibWithNibName:@"CommentsTableViewCell" bundle:nil] forCellReuseIdentifier:reuseIdentifier];
这是 TableViewCell 的出列:
CommentsTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier forIndexPath:indexPath];
当运行应用程序正常时,一切都很好。但是,如果要求 XCUITest 框架拍摄 UI 层次结构的快照,或者在模拟器中打开了辅助功能检查器,并且与出列的单元格进行了交互,则应用程序会崩溃并显示以下内容日志中的消息,删除了应用程序的名称:
Assertion failure in -[UITableView dequeueReusableCellWithIdentifier:forIndexPath:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3512.30.14/UITableView.m:6564 2016-09-12 16:22:28.666 [26852:512611] * Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unable to dequeue a cell with identifier Comment - must register a nib or a class for the identifier or connect a prototype cell in a storyboard' * First throw call stack: ( 0 CoreFoundation 0x000000010a323e65 exceptionPreprocess + 165 1 libobjc.A.dylib 0x0000000109d9cdeb objc_exception_throw + 48 2 CoreFoundation 0x000000010a323cca +[NSException raise:format:arguments:] + 106 3 Foundation 0x0000000104c534de -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 198 4 UIKit 0x0000000107b11a8d -[UITableView dequeueReusableCellWithIdentifier:forIndexPath:] + 266 5 UIKit 0x0000000119bd41ba -[UITableViewAccessibility dequeueReusableCellWithIdentifier:forIndexPath:] + 183 6 0x0000000101ae1766 -[CommentsViewController tableView:cellForRowAtIndexPath:] + 214 7 UIKit 0x0000000107b24e43 -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 766 8 UIKit 0x0000000107b24f7b -[UITableView _createPreparedCellForGlobalRow:willDisplay:] + 74 9 UIKit 0x0000000107af9a39 -[UITableView _updateVisibleCellsNow:isRecursive:] + 2996 10 UIKit 0x0000000107b0b930 -[UITableView _visibleCells] + 27 11 UIKit 0x0000000119bd361a -[UITableViewAccessibility accessibilityElementsHidden] + 197 12 MapKitFramework 0x000000011bd8d2a1 -[MKUITableViewAccessibility accessibilityElementsHidden] + 64 13 UIAccessibility 0x0000000119d4c103 -[UIView(UIAccessibilityPrivate) _accessibilityViewIsVisibleIgnoringAXOverrides:] + 74 14 UIAccessibility 0x0000000119d2838e -[UIView(UIAccessibilityElementTraversal) _accessibilityShouldBeProcessed:] + 32 15 UIAccessibility 0x0000000119d277fd -[UIView(UIAccessibilityElementTraversal) _accessibilitySubviewsForGettingElementsWithOptions:] + 1950 16 UIAccessibility 0x0000000119d27ce8 -[UIView(UIAccessibilityElementTraversal) _addAccessibilityElementsAndOrderedContainersWithOptions:toCollection:] + 632 17 UIAccessibility 0x0000000119d27d5a -[UIView(UIAccessibilityElementTraversal) _addAccessibilityElementsAndOrderedContainersWithOptions:toCollection:] + 746 18 UIAccessibility 0x0000000119d27d5a -[UIView(UIAccessibilityElementTraversal) _addAccessibilityElementsAndOrderedContainersWithOptions:toCollection:] + 746 19 UIAccessibility 0x0000000119d27d5a -[UIView(UIAccessibilityElementTraversal) _addAccessibilityElementsAndOrderedContainersWithOptions:toCollection:] + 746 20 UIAccessibility 0x0000000119d27d5a -[UIView(UIAccessibilityElementTraversal) _addAccessibilityElementsAndOrderedContainersWithOptions:toCollection:] + 746 21 UIAccessibility 0x0000000119d27d5a -[UIView(UIAccessibilityElementTraversal) _addAccessibilityElementsAndOrderedContainersWithOptions:toCollection:] + 746 22 UIAccessibility 0x0000000119d27d5a -[UIView(UIAccessibilityElementTraversal) _addAccessibilityElementsAndOrderedContainersWithOptions:toCollection:] + 746 23 UIAccessibility 0x0000000119d28178 +[UIView(UIAccessibilityElementTraversal) _accessibilityElementsAndContainersDescendingFromViews:options:sorted:] + 399 24 UIAccessibility 0x0000000119d28570 -[UIApplication(UIAccessibilityElementTraversal) _accessibilityViewChildrenWithOptions:referenceWindow:] + 116 25 UIKit 0x0000000119bc8765 -[UIApplicationAccessibility _accessibilitySummaryElement] + 90 26 UIKit 0x0000000119bc5d51 -[UIApplicationAccessibility _accessibilityResponderElement:] + 1852 27 UIKit 0x0000000119c0b939 -[UIResponder(UITextAccessibilityUtilities) _accessibilityHasTextOperations] + 31 28 UIAccessibility 0x0000000119d3546d -[NSObject(AXPrivCategory) accessibilityAttributeValue:] + 4378 29 UIAccessibility 0x0000000119d4ee9d _accessibilityAttributesForObject + 333 30 UIAccessibility 0x0000000119d4ea77 -[NSObject(UIAccessibilityAutomation) _accessibilityUserTestingSnapshotDescendantsWithAttributes:maxDepth:maxChildren:maxArrayCount:] + 553 31 UIAccessibility 0x0000000119d4fa1a -[NSObject(UIAccessibilityAutomation) _accessibilityUserTestingSnapshotWithOptions:] + 594 32 UIAccessibility 0x0000000119d3308f -[NSObject(AXPrivCategory) accessibilityAttributeValue:forParameter:] + 3533 33 UIAccessibility 0x0000000119d20393 _copyParameterizedAttributeValueCallback + 176 34 AXRuntime 0x0000000119db2529 _AXXMIGCopyParameterizedAttributeValue + 312 35 AXRuntime 0x0000000119dad02f _XCopyParameterizedAttributeValue + 466 36 AXRuntime 0x0000000119dba3a7 mshMIGPerform + 235 37 CoreFoundation 0x000000010a24fca9 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION + 41 38 CoreFoundation 0x000000010a24fc19 __CFRunLoopDoSource1 + 473 39 CoreFoundation 0x000000010a245390 __CFRunLoopRun + 2272 40 CoreFoundation 0x000000010a244828 CFRunLoopRunSpecific + 488 41 GraphicsServices 0x000000010cab5ad2 GSEventRunModal + 161 42 UIKit 0x00000001079cb610 UIApplicationMain + 171 43 0x0000000101883f2a main + 2234 44 libdyld.dylib 0x000000010aef292d start + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException
这很尴尬,因为我有一些今天早上通过的测试现在没有通过。我已经搜索过类似的问题,但它们都至少有几年的历史了,答案围绕 UI 不存在的 Nibs 或 IB 的问题或涉及 IB UI 的解决方法不再存在的组件(好吧,或者假设笔尖未注册)。
所以,我的问题是,为什么仅当辅助功能层次结构与 交互时才会崩溃,我该如何修复它,以便我的测试可以恢复工作吗?
您是否尝试将 [self.tableView registerNib:[UINib nibWithNibName:@"CommentsTableViewCell" bundle:nil] forCellReuseIdentifier:reuseIdentifier];
中的 nil
更改为 [NSBundle mainBundle]
?
检查你的 [self.tableView registerNib:[UINib nibWithNibName:@"CommentsTableViewCell" bundle:nil] forCellReuseIdentifier:reuseIdentifier];
在 cellForRowAtIndexPath
之前执行。
在我的例子中,cellForRowAtIndexPath
在 viewDidLoad
之前被调用。
这已在最新的 XCode 8.1 Beta 中与 10.1 模拟器一起修复,因此 "How can I fix it" 的答案原来是 "Wait"。