0

我想在 Objective-C 中解析我的 xml 文件,但我得到了一个错误

 *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason:
'[<Presentation1Name 0x74592f0> setValue:forUndefinedKey:]: this class is not key value
coding-compliant for the key slide.'
*** First throw call stack:
(0x1c93012 0x10d0e7e 0x1d1bfb1 0xb7d711 0xafeec8 0xafe9b7 0x5129 0xbb11c7 0x48c65ee 
 0x48c5f07 0xbaf6d2 0x2008 0x157b7 0x15da7 0x16fab 0x28315 0x2924b 0x1acf8 0x1beedf9 
0x1beead0 0x1c08bf5 0x1c08962 0x1c39bb6 0x1c38f44 0x1c38e1b 0x167da 0x1865c 0x1e5d 
0x1d85)

libc++abi.dylib: terminate called throwing an exception
(lldb) 

改成小写表示,我没有错误,但我无法解析 label="presentation1" 但是当我将其更改为大写 P -> Presentation 我可以解析它但进程终止

您能给我一些提示以找到问题吗?

4

1 回答 1

3

aPresentation 是您自己的课程,因此很难确切知道它是由什么组成的。但是,当您尝试这样做时,您的错误就会出现(除非您没有显示更多代码):

[aPresentation setValue:currentElementValue forKey:elementName];

在这里,您说您在对象 aPresentation 中有一个名为 elementName 的属性;特别是您的错误是说没有名称为“幻灯片”的属性

是否有名称为“slide”的属性(变量)?显然不是。

我建议对 elementName 进行硬编码,因为显然它们与您的班级不相符。

根据 xml,您的属性(在 aPresentation 中)应命名为“幻灯片”,因此要么将类中的属性重命名为幻灯片,要么将元素名称更改为您所知道的名称。

[aPresentation setValue:currentElementValue forKey:@"slideLabel"];

其中一些是猜测工作,没有看到 Presentation1Name 的类结构

我还想指出一些你没有遵循的约定,这使得这段代码很难阅读。属性名称应该大写(第一个字母),包括类名中的数字是可以的,但不经常使用,在这种情况下可能不需要。您正在检查 elementName 是否为 Slides 或 slide 并且确实这些内容不应该更改,并且您应该能够删除其中一个语句。我还建议始终使用括号,您的其他一些陈述不要

于 2012-10-10T16:00:14.223 回答