1

我正在解析一个如下所示的 XML 文件:

<partie numero="1">
      <exercice numero="1" libelle="blabla"></exercice>
      <exercice numero="2" libelle="anything"></exercice>
</partie>

我正在使用 Rapture XML 库,因此如 GitHub 上所述,我执行以下操作:

RXMLElement *rxmlPartie = [rxmlParties child:@"partie"];
NSArray *rxmlUnExercice = [rxmlPartie children:@"exercice"];

我可以使用这一行正确打印来自派对的“numero”属性:

 NSLog(@"Partie #%@",[rxmlPartie attribute:@"numero"] );

但是当我尝试在我的 NSArray 上使用 iterate 方法时:

[rxmlPartie iterate:@"partie.exercice" usingBlock: ^(RXMLElement *exercice) {NSLog(@"Exercice: %@ (#%@)", [exercice attribute:@"libelle"], [exercice attribute:@"numero"]);}];

我收到警告,应用程序崩溃,说:

-[RXMLElement iterate:usingBlock:]: unrecognized selector sent to instance 0xc67f870
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-    [RXMLElement iterate:usingBlock:]: unrecognized selector sent to instance 0xc67f870'

我是否忘记导入某些东西,或者我以一种糟糕的方式实现该方法?

如果我尝试使用 iterateWithRootXPath 会发生同样的错误...

谢谢你的帮助!!

4

1 回答 1

1

所以,我发现了我的问题所在。

在执行此操作之前,我对与 Rapture XML 配对一无所知...所以我坚持使用文档(正如学校里有人告诉我的 :-))。但问题是文档中使用的一个方法,这个“迭代 usingBlock”没有在框架中定义。

而不是使用

[rxmlPartie iterate:@"partie.exercice" usingBlock: ^(RXMLElement *exercice)     {NSLog(@"Exercice: %@ (#%@)", [exercice attribute:@"libelle"], [exercice attribute:@"numero"]);}];

我在用着

[rxmlPartie iterate:@"exercice" with: ^(RXMLElement *exercice)     {NSLog(@"Exercice: %@ (#%@)", [exercice attribute:@"libelle"], [exercice attribute:@"numero"]);}];

这是在框架内明确定义的!

这让我很开心!!

于 2012-05-30T13:13:55.610 回答