setValue:forKey crash with _sigtramp



跟踪是这样的

Application received signal SIGSEGV
Stack trace:
#0  CoreFoundation                      002BCE149F <redacted>()
#1  libobjc.A.dylib                     00394F8C8B objc_exception_throw()
#2  CoreFoundation                      002BCE13E5 -[NSException initWithCoder:]
#3  funadhoc                            000025B129 UmengSignalHandler()
#4  libsystem_platform.dylib            0039BB8873 _sigtramp()
#5  libobjc.A.dylib                     0039505571 objc_setProperty_nonatomic_copy()
#6  Foundation                          002C947F59 -[NSObject setValue:forKey:]
#7  Foundation                          002C9C58F3 -[NSObject setValuesForKeysWithDictionary:]
..........................

我了解setValue:forUndefinedKey:setNilValueForKey:的情况,但这是什么?

此外,有些系统符号是<redacted>的,我怎样才能得到它的符号化?

在这种情况下,_sigtramp() 表示您的应用程序收到了 Unix 信号,在本例中为 SIGSEGV。SIGSEGV 表示你的应用由于内存访问冲突而被发送此信号。在这种情况下,我猜这是由您对setValue:forKey:的调用引起的。也许您称为 setValue:forKey: on(该方法的接收器)的对象已经被解除分配了?或者也许键或值已被解除分配?这可能是您应该检查的内容。

尝试打开 NSZombieEnabled(环境变量)。它会保留该对象并标记为"僵尸",然后向您报告您尝试访问僵尸。如果使用 ARC,则可能有一些对对象的不安全未保留引用。你需要对它有一个强有力的参考。如果它不是 ARC,那么你可能无法正确保留它。

最新更新