以下は、データのアーカイブを解除するために使用するコードです。
- (id)initWithCoder:(NSCoder *)decoder
{
if((self = [super init]))
{
NSString *resoureItemClassName = NSStringFromClass([ResourceItem class]);
self.selectedItemClassName=[decoder decodeObjectForKey:@"selectedItemClassName"];
Class class = NSClassFromString(selectedItemClassName);
id temp = nil;
if(class)
{
temp = [[class alloc] init];
}
if(temp)
{
if([temp isKindOfClass:[NSString class]])
{
self.selectedString = [decoder decodeObjectForKey:@"selectedString"];;
self.ID = selectedString;
}
else if([selectedItemClassName isEqualToString:resoureItemClassName])
{
DLog(@"Resource item")
}
[temp release];
}
else
{
self.ID = nil;
}
}
return self;
}
tempObject を解放すると、アプリがクラッシュします。やらなければ漏れです。オートリリース方式を使ってみました。それでも、それはクラッシュしましたか?解決策は何ですか?
アップデート:
selectedItemClassName のエンコードされたデータは、__NSCFConstantString または __NSCFString のいずれかです。クラッシュは __NSCFString でのみ発生し、クラス名として __NSCFConstantString では発生しません。
その理由は何ですか?