1

我在我的 iPhone (iOS 4.3) 应用程序中取消归档 NSMutableSet 对象时遇到问题。

我有一个 UIImageView 的子视图,其中包含 NSMutableSet 类型的 ivar。我在标题中定义了 NSMutableSet(并在实现中合成了它):

@interface MyView : UIImageView
{   
  NSMutableSet *group;
}

@property (nonatomic, retain) NSMutableSet *group;

该集合包含对 MyView 类型的零个或多个对象的引用。由于 group 是 MyView 的一个属性,因此对非 nil 组成员(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;
}

第一次看到这个错误时,我收到了一条相当详细的错误消息:由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“ * -[NSCFSet count]: method sent to an uninitialized mutable set object”

但是,当我重现该问题时,我得到的信息要少得多:在抛出“NSException”实例后调用终止

使用以下命令创建存档:

[NSKeyedArchiver archiveRootObject:parentOfMyView toFile:myFilepath];

并用这个打开:

[NSKeyedUnarchiver unarchiveObjectWithFile:myFilepath];

感谢您对此的任何帮助。

- 富有的

4

0 回答 0