iOS 14.5和14.6中的错误,代码在14.2中运行良好.如何开始解决此问题



摘要:

应用程序在iOS 14.2下运行良好;在iOS 14.5和14.6中,模拟器和设备始终崩溃,并显示无益的错误消息。我找到了存在/不存在会产生或删除错误的代码,但它是用户界面的重要组成部分。从哪里开始开始解决这种情况?

详细信息:

大型应用程序,全部在Swift中,几乎所有的UI都使用SwiftUI,大量的屏幕元素,核心数据,一些多线程。在使用iOS 14.2的模拟器中,该应用程序运行良好(就像在我的iPad上一样,直到我更新了iOS(。我最近将我的iPad更新到了iOS 14.6,当我在设备上运行该应用程序时,我会出现崩溃,我将在下面描述。14.2模拟器中的代码完全相同,运行良好,没有崩溃。当我在iOS 14.5模拟器上运行代码时(14.6版还没有可用的sim(,该模拟器和设备上的崩溃相同。

缩小崩溃发生的地方,我发现它在代码中看起来像这样:

var body: some View {
GeometryReader { geometry in
HStack(spacing: 0){                
LeftMainColumn()
CenterMainColumn()
RightMainColumn()                
}            
}
} 

每一列看起来都是这样的:

struct LeftMainColumn: View {
func someData() -> [String] {
return ["a","b","c"]      // different data in each column
}
var body: some View {
GeometryReader { geom in
ZStack {
Rectangle()
.fill(Color.red)
List{
ForEach(someData(), id: .self) { dat in
Text("data: (dat)")
.listRowBackground(Color.red)
}
}
}       // closes ZStack
}       // closes GeometryReader
}       // closes var body
}       // closes struct

其他两列基本相同,但数据不同。

与实际项目相比,此代码被高度简化了,我将其包括在内,以传达崩溃发生的地方的感觉。有了这个简单的代码,就不会发生崩溃。(在真正的应用程序中,屏幕上还有更多的内容;也许这足以产生问题。(

当我注释掉任何一列时,剩下的两列在14.5 sim和14.6设备上显示良好。当我有所有3列时,14.5 sim和14.6设备崩溃,并有以下报告(14.2 sim在所有3列中运行良好(:

2021-06-24 19:58:02.989478-0500 AppName[40446:97339181] *** Assertion failure in -[_TtC7SwiftUIP33_BFB370BA5F1BADDC9D83021565761A4925UpdateCoalescingTableView _endCellAnimationsWithContext:], UITableView.m:2193
2021-06-24 19:58:03.020894-0500 AppName[40446:97339181] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'attempt to insert section 0 but there are only 0 sections after the update'
*** First throw call stack:
(
0   CoreFoundation                      0x000000010daa7fba __exceptionPreprocess + 242
1   libobjc.A.dylib                     0x000000010d0aaff5 objc_exception_throw + 48
2   CoreFoundation                      0x000000010daa7de3 +[NSException raise:format:] + 0
3   Foundation                          0x000000010cb478e7 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 191
4   UIKitCore                           0x000000012bf82920 -[UITableView _endCellAnimationsWithContext:] + 9394
5   UIKitCore                           0x000000012bf9dff7 -[UITableView endUpdatesWithContext:] + 116
6   UIKitCore                           0x000000012bf9e1c9 -[UITableView _performBatchUpdates:withContext:completion:] + 253
7   UIKitCore                           0x000000012bf9e2af -[UITableView performBatchUpdates:completion:] + 97
8   SwiftUI                             0x000000010f37a801 $s7SwiftUI25UpdateCoalescingTableView33_BFB370BA5F1BADDC9D83021565761A49LLC19performBatchUpdates_10completionyyycSg_ySbcSgtF + 378
9   SwiftUI                             0x000000010f37a8da $s7SwiftUI25UpdateCoalescingTableView33_BFB370BA5F1BADDC9D83021565761A49LLC19performBatchUpdates_10completionyyycSg_ySbcSgtFTo + 175
10  SwiftUI                             0x000000010f37d31d $s7SwiftUI19ListCoreCoordinator33_BFB370BA5F1BADDC9D83021565761A49LLC17updateUITableView_2to11transactionySo0mN0C_xAA11TransactionVtF14performUpdatesL_yyAA0cD10DataSourceRzAA16SelectionManagerR_0V5ValueQy_AORtzr0_lF + 1594
11  SwiftUI                             0x000000010f723652 $sIg_Ieg_TR + 12
12  SwiftUI                             0x000000010f723668 $sIeg_IyB_TR + 14
13  UIKitCore                           0x000000012c2cfbb9 +[UIView(Animation) performWithoutAnimation:] + 84
14  SwiftUI                             0x000000010f37dc6f $s7SwiftUI19ListCoreCoordinator33_BFB370BA5F1BADDC9D83021565761A49LLC17updateUITableView_2to11transactionySo0mN0C_xAA11TransactionVtFyycfU_ + 467
15  SwiftUI                             0x000000010f266eb7 $sIeg_ytIegr_TR + 12
16  SwiftUI                             0x000000010f3851cf $sIeg_ytIegr_TRTA + 17
17  SwiftUI                             0x000000010f38899f $sIeg_ytIegr_TRTA.42 + 9
18  SwiftUI                             0x000000010f250ec4 $s7SwiftUI6UpdateO3endyyFZ + 433
19  SwiftUI                             0x000000010f0a83fd $sSo9NSRunLoopC7SwiftUIE14flushObserversyyFZ + 148
20  SwiftUI                             0x000000010f0a8367 $sSo9NSRunLoopC7SwiftUIE11addObserveryyyycFZySo05CFRunbF3RefaSg_So0gB8ActivityVSvSgtcfU_yyXEfU_ + 9
21  SwiftUI                             0x000000010f0a35fe $ss5Error_pIgzo_ytsAA_pIegrzo_TR95$sSo9NSRunLoopC7SwiftUIE11addObserveryyyycFZySo05CFRunbF3RefaSg_So0gB8ActivityVSvSgtcfU_yyXEfU_Tf3npf_n + 14
22  libswiftObjectiveC.dylib            0x000000011445e03e $s10ObjectiveC15autoreleasepool8invokingxxyKXE_tKlF + 46
23  SwiftUI                             0x000000010f0a8356 $sSo9NSRunLoopC7SwiftUIE11addObserveryyyycFZySo05CFRunbF3RefaSg_So0gB8ActivityVSvSgtcfU_ + 35
24  SwiftUI                             0x000000010f0a8459 $sSo9NSRunLoopC7SwiftUIE11addObserveryyyycFZySo05CFRunbF3RefaSg_So0gB8ActivityVSvSgtcfU_To + 43
25  CoreFoundation                      0x000000010da14d31 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
26  CoreFoundation                      0x000000010da0f542 __CFRunLoopDoObservers + 541
27  CoreFoundation                      0x000000010da0faf5 __CFRunLoopRun + 1129
28  CoreFoundation                      0x000000010da0f1a7 CFRunLoopRunSpecific + 567
29  GraphicsServices                    0x00000001194d2d85 GSEventRunModal + 139
30  UIKitCore                           0x000000012bd854df -[UIApplication _run] + 912
31  UIKitCore                           0x000000012bd8a39c UIApplicationMain + 101
32  PlayingWithSwiftUI_10_OverallFlow   0x000000010a18ac6b main + 75
33  libdyld.dylib                       0x0000000115fa0bbd start + 1
34  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi: terminating with uncaught exception of type NSException
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'attempt to insert section 0 but there are only 0 sections after the update'
terminating with uncaught exception of type NSException
CoreSimulator 757.5 - Device: 14.5 iPadAir3rdGen (7EB4A57C-0A14-4C84-8740-943D694B877A) - Runtime: iOS 14.5 (18E182) - DeviceType: iPad Air (3rd generation)

我也可以通过用一系列Text("x")语句替换ForEach语句来消除崩溃,但该应用程序的全部意义在于它显示的是实际数据,而不是x x x

好吧,我已经确定了14.5/14.6sim/设备中发生崩溃的位置,但我不知道如何解决崩溃。该应用程序绝对必须具有所有3列,因此";只删除一列;虽然它绝对避免了错误,但不是一个解决方案。

除了";希望他们在iOS 15中解决这个问题;从哪里开始修复一个在iOS 14.2中运行(仍然运行(良好但在后续iOS版本中失效的应用程序?

您提到了核心数据。

我刚刚在我的项目中找到了一个解决方案,该项目也遇到了同样的问题:

  • 从14.5起新崩溃
  • 堆栈跟踪不起作用
  • 日志输出抱怨attempt to insert section 0 but there are only 0 sections after the update

对于这种结构的文件:

struct CrashingView: View {

@FetchRequest var listContent: FetchedResults<Entity>
var body: some View {
List {
ForEach(listContent, id:.self) {
Cell($0)
}
}
}

修复方法是检查获取内容的计数是否大于0:

struct CrashingView: View {

@FetchRequest var listContent: FetchedResults<Entity>
var body: some View {
if listContent.count > 0 {
List {
ForEach(listContent, id:.self) {
Cell($0)
}
}
} else {
EmptyView()
}
}
}

是的,这有点愚蠢,但很容易解决。希望对你有帮助。

相关内容

  • 没有找到相关文章

最新更新