【问题标题】:Serialization array of custom objects iOSiOS 自定义对象的序列化数组
【发布时间】:2012-03-20 17:58:05
【问题描述】:

我知道这里有很多关于这方面的资源,但是我找不到我的代码出了什么问题:

我有一个 Level 类和 Level 的两个子类:GameLevel 和 TransitionLevel。每个此类都实现了 NSCoding 协议。 然后,我有一个 Level 数组(因此它包含 GameLevel 和 TransitionLevel 两个类)。保存存档似乎工作正常:

NSString *archivePath = [DOCUMENT_DIRECTORY stringByAppendingPathComponent:@"levels.archive"];
[NSKeyedArchiver archiveRootObject:levels toFile:archivePath];

请注意,levels 是我要保存的数组。我可以看到该文件,它已创建并且似乎包含它应该包含的内容。 但是当我想检索这个数组时:

NSString *archivePath = [DOCUMENT_DIRECTORY stringByAppendingPathComponent:@"levels.archive"];
levels = [NSKeyedUnarchiver unarchiveObjectWithFile:archivePath];

我有这个例外:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'

我不确定我在这里缺少什么。

【问题讨论】:

  • 我不知道为什么我的称呼总是在我发帖时被删除。所以你好:)
  • 无需在您的问题中添加“你好”、“谢谢”、“问候”等多余的内容。 SO 软件会自动删除其中的一部分;其他时候,人们会编辑您的问题以将其删除。首先将其排除在外,从而节省每个人的时间——这并不粗鲁,而且它会提出一个更能经受时间考验的问题。如果您想添加个人风格,请考虑填写您的profile

标签: ios serialization nsmutablearray nskeyedarchiver


【解决方案1】:

initWithCoder: 的实现要么返回 nil,要么代码的某些部分尝试将 nil 值插入到数组中。

您可以进入断点导航器 (⌘6) 并添加异常断点。然后,当应用程序引发异常时,Debug Navigator 将显示当前执行的函数和方法的堆栈。这将使您能够准确地知道哪个方法正在尝试将nil 插入到数组中。

【讨论】:

  • 非常感谢我以前从未使用过这个视图,它非常方便。我直接发现了我的错误(这是一个愚蠢的错误)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多