未归档对象会发生什么?

时间:2010-06-17 01:31:55

标签: objective-c ipad crash nskeyedarchiver

在我使用NSKeyedUnarchiver取消归档对象后,我可以像往常一样使用它,但我无法重新归档它。当我尝试时,它会崩溃。

[NSKeyedArchiver archiveRootObject:unarchivedObject toFile:fileName];

我尝试查看苹果中的开发人员资源,但我还没有看到对NSKeyedArchiver正确使用的彻底探索。请帮助。

Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x0000000000000023
Crashed Thread:  0  Dispatch queue: com.apple.main-thread

Application Specific Information:
objc_msgSend() selector name: replacementObjectForKeyedArchiver:
iPhone Simulator 3.2 (193.8), iPhone OS 3.2 (iPad/7B367)

Thread 0 Crashed:  Dispatch queue: com.apple.main-thread
0   libobjc.A.dylib                 0x958a0ed7 objc_msgSend + 23
1   OGLGame                         0x0000c7e2 -[Sounds encodeWithCoder:] + 59 (Sounds.m:86)
2   Foundation                      0x0280d25b _encodeObject + 827
3   Foundation                      0x028243cc -[NSKeyedArchiver _encodeArrayOfObjects:forKey:] + 284
4   Foundation                      0x0281a367 -[NSArray(NSArray) encodeWithCoder:] + 615
5   Foundation                      0x0280d25b _encodeObject + 827
6   OGLGame                         0x0000ebc2 -[Row encodeWithCoder:] + 244 (Row.m:153)
7   Foundation                      0x0280d25b _encodeObject + 827
8   Foundation                      0x028243cc -[NSKeyedArchiver _encodeArrayOfObjects:forKey:] + 284
9   Foundation                      0x0281a367 -[NSArray(NSArray) encodeWithCoder:] + 615
10  Foundation                      0x0280d25b _encodeObject + 827
11  Foundation                      0x0285de10 +[NSKeyedArchiver archiveRootObject:toFile:] + 176

据我所知,这可能是我的声音课程。我检查一遍时会检查一下。

虽然经过研究我发现了这个:

replacementObjectForKeyedArchiver:

在键控归档期间,子类重写以替换另一个对象。

  • (id)replacementObjectForKeyedArchiver:(NSKeyedArchiver *)archiver

参数 归档 密钥存档器创建存档。 回报价值 对象编码而不是接收器(如果不同)。

讨论 仅当在编码器中没有设置对象的替换映射时才调用此方法(例如,由于之前调用了replacementObjectForKeyedArchiver:到该对象)。

1 个答案:

答案 0 :(得分:0)

Apple dev论坛上的一个帖子似乎表明在您尝试编码的对象上调用了replacementObjectForKeyedArchiver:。听起来,您尝试在-[Sounds encodeWithCoder:]内编码的对象之一已从内存中释放,replacementObjectForKeyedArchiver:被称为导致seg错误。

https://devforums.apple.com/message/1079616