我有一个ProfileRegistration结构,它只是一个基本模型。我对此没有任何问题。然而,一旦我向模型添加了一个新的属性,只要在代码中的任何地方访问,应用程序就会在运行时崩溃。
// Causes app to crash
struct ProfileRegistration: Codable {
let resourceNumber: String?
let nickName: String?
let firstName: String?
let initials: String?
let name: String?
let lastName: String?
let gender: Gender?
let birthdate: String?
let nationality: String?
let phoneNumber: String?
let email: String?
let insuranceNumber: String?
let employmentDate: String?
let username: String?
var worksteadLocations: [WorksteadLocation] = []
var coworkerInformations: [CoworkerInformation] = []
var worksteadLocation: WorksteadLocation? {
worksteadLocations.first
}
var jobCoachFirstName: String? {
coworkerInformations.first?.firstName
}
}
// Doesn't cause app to crash
struct ProfileRegistration: Codable {
let resourceNumber: String?
let nickName: String?
let firstName: String?
let initials: String?
// let name: String?
let lastName: String?
let gender: Gender?
let birthdate: String?
let nationality: String?
let phoneNumber: String?
let email: String?
let insuranceNumber: String?
let employmentDate: String?
let username: String?
var worksteadLocations: [WorksteadLocation] = []
var coworkerInformations: [CoworkerInformation] = []
var worksteadLocation: WorksteadLocation? {
worksteadLocations.first
}
var jobCoachFirstName: String? {
coworkerInformations.first?.firstName
}
}
我知道错误:
Thread 10: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
就在堆栈的错误上方,我看到
async function pointer to reabstraction thunk helper from @escaping @callee_guaranteed @Sendable @async () -> (@owned Workstead.ProfileRegistration, @error @owned Swift.Error) to @escaping @callee_guaranteed @async () -> (@out Workstead.ProfileRegistration, @error @owned Swift.Error)
完整堆栈:
Workstead`partial apply for thunk for @escaping @callee_guaranteed @Sendable @async () -> (@owned ProfileRegistration, @error @owned Error):
0x102cc10f0 <+0>: orq 0x9d5409(%rip), %rbp ; (void *)0x1000000000000000
0x102cc10f7 <+7>: pushq %rbp
0x102cc10f8 <+8>: pushq %r14
0x102cc10fa <+10>: leaq 0x8(%rsp), %rbp
0x102cc10ff <+15>: subq $0x38, %rsp
0x102cc1103 <+19>: movq %r14, -0x10(%rbp)
0x102cc1107 <+23>: movq %rdi, -0x28(%rbp)
0x102cc110b <+27>: xorl %eax, %eax
0x102cc110d <+29>: movl %eax, %edi
0x102cc110f <+31>: callq 0x102ccf350 ; ___lldb_unnamed_symbol350$$Workstead
0x102cc1114 <+36>: movq %r14, 0x18(%r14)
0x102cc1118 <+40>: movq 0x10(%r13), %rax
0x102cc111c <+44>: movq %rax, -0x20(%rbp)
0x102cc1120 <+48>: movq 0x18(%r13), %rax
0x102cc1124 <+52>: movq %rax, -0x18(%rbp)
0x102cc1128 <+56>: movl 0xa52fd6(%rip), %eax ; async function pointer to reabstraction thunk helper from @escaping @callee_guaranteed @Sendable @async () -> (@owned Workstead.ProfileRegistration, @error @owned Swift.Error) to @escaping @callee_guaranteed @async () -> (@out Workstead.ProfileRegistration, @error @owned Swift.Error) + 4
0x102cc112e <+62>: movl %eax, %edi
0x102cc1130 <+64>: callq 0x10354a1de ; symbol stub for: swift_task_alloc
-> 0x102cc1135 <+69>: movq -0x28(%rbp), %rdi
0x102cc1139 <+73>: movq -0x20(%rbp), %rsi
0x102cc113d <+77>: movq -0x18(%rbp), %rdx
0x102cc1141 <+81>: movq %rax, %r14
0x102cc1144 <+84>: movq -0x10(%rbp), %rax
0x102cc1148 <+88>: movq %r14, 0x20(%rax)
0x102cc114c <+92>: movq 0x18(%rax), %rax
0x102cc1150 <+96>: movq %rax, (%r14)
0x102cc1153 <+99>: leaq 0x26(%rip), %rax ; (1) await resume partial function for partial apply forwarder for reabstraction thunk helper from @escaping @callee_guaranteed @Sendable @async () -> (@owned Workstead.ProfileRegistration, @error @owned Swift.Error) to @escaping @callee_guaranteed @async () -> (@out Workstead.ProfileRegistration, @error @owned Swift.Error) at <compiler-generated>
0x102cc115a <+106>: movq %rax, 0x8(%r14)
0x102cc115e <+110>: addq $0x30, %rsp
0x102cc1162 <+114>: addq $0x10, %rsp
0x102cc1166 <+118>: popq %rbp
0x102cc1167 <+119>: btrq $0x3c, %rbp
0x102cc116c <+124>: jmp 0x102cc0f60 ; reabstraction thunk helper from @escaping @callee_guaranteed @Sendable @async () -> (@owned Workstead.ProfileRegistration, @error @owned Swift.Error) to @escaping @callee_guaranteed @async () -> (@out Workstead.ProfileRegistration, @error @owned Swift.Error) at <compiler-generated>
添加到结构中的属性似乎并不重要,添加一个属性时总是会崩溃。当我移除一个属性时它不会崩溃。
我正在使用Xcode版本13.3.1 (13E500a),并在iOS 15.4上运行,在多个设备上进行测试
发布于 2022-05-19 12:37:14
我也有同样的错误。如果我在可编码结构中再添加一个字段,它就会崩溃。在我的例子中,我有两个并发的网络请求:
async let req1 = await someManager.fetch()
async let req2 = await someManager.get(id: uid)
let (result1, result2) = await (req1, req2)
我将其拆分为同步网络请求:
let result1 = await someManager.fetch()
let result2 = await someManager.get(id: uid)
开始起作用了。
我相信iOS方面存在一些问题。我使用Xcode 13.4。
https://stackoverflow.com/questions/72306454
复制