Objective c 未归档的对象会发生什么情况?

Objective c 未归档的对象会发生什么情况?,objective-c,ipad,crash,nskeyedarchiver,Objective C,Ipad,Crash,Nskeyedarchiver,在我用NSKeyedUnarchiver解封一个对象之后,我可以像往常一样使用它,但我无法重新归档它。当我尝试时,它崩溃了 [NSKeyedArchiver archiveRootObject:unarchivedObject toFile:fileName]; 我试着查看苹果的开发者资源,但是我还没有看到关于正确使用NSKeyedArchiver的详细说明。请帮忙 Exception Type: EXC_BAD_ACCESS (SIGBUS) Exception Codes: KERN_P

在我用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)替换对象ForkeyeDarchiver:(NSKeyedArchiver*)archiver
参数 建筑师 创建存档的键控存档者。 返回值 对象编码而不是接收器(如果不同)

讨论
仅当编码器中未设置对象的替换映射时(例如,由于之前对该对象调用了replacementObjectForkeyDarchiver:时),才会调用此方法.

苹果开发论坛上的一个线程似乎表明,对您试图编码的对象调用了
replacementObjectForkeyDarchiver:
。听起来像是您试图在
-[sounds encodeWithCoder:
中编码的对象之一已从内存中释放,并且
replacementObjectForKeyedArchiver:
正在调用它,从而导致seg故障


您需要发布
-[Sounds encodeWithCoder:][/code>的内容。请试着在发布时思考一下,这里的其他男士/女士需要什么来理解这个bug。要有想象力!是否每个对象都符合要存档的
NSCoding
协议?