我在iPhone(iOS 4.3)应用程序中取消归档NSMutableSet对象时遇到问题。
我有一个UIImageView的子视图,它包含一个NSMutableSet类型的ivar。我在头文件中定义了NSMutableSet(并在实现中合成它):
@interface MyView : UIImageView
{
NSMutableSet *group;
}
@property (nonatomic, retain) NSMutableSet *group;
该集合包含对零个或多个MyView类型对象的引用。由于group是MyView的属性,因此对非零组成员(MyView对象)的引用是循环的。
我像这样编码这个视图:
- (void) encodeWithCoder:(NSCoder *)aCoder
{
NSLog(@"Encoding group for %@ -- %@", self.imageFilename, self.group);
[aCoder encodeObject:self.group forKey:@"group"];
}
NSLog显示正在存档的健康组对象。但是当我解码时,我得到一个NSException:
- (id) initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithFrame:CGRectZero];
self.group = [aDecoder decodeObjectForKey:@"group"]; // <- NSException here.
return self;
}
我第一次看到这个bug时,收到了一条相当详细的错误信息: 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' * - [NSCFSet count]:发送到未初始化的可变集对象的方法'
然而,当我重现这个问题时,我收到的信息却少得多: 抛出'NSException'实例后调用终止
使用此命令创建achive:
[NSKeyedArchiver archiveRootObject:parentOfMyView toFile:myFilepath];
用这一个打开:
[NSKeyedUnarchiver unarchiveObjectWithFile:myFilepath];
感谢您提供任何帮助。
- 富有