我在使用循环引用取消归档NSMutableSet时遇到问题

时间:2011-03-27 03:56:01

标签: nskeyedarchiver nsset ios4

我在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];

感谢您提供任何帮助。

- 富有

0 个答案:

没有答案