Ios 尝试使用NSXMLParser委托解析NSData时出错

Ios 尝试使用NSXMLParser委托解析NSData时出错,ios,nsxmlparser,Ios,Nsxmlparser,我有一些xml,其中包含一个base64编码的PNG图像我试图将其解析为某种类型的对象。。目前,我正在使用nsdirectories的NSArray,但我目前这样做并不成功 这是我的解析委托的一部分: - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName at

我有一些xml,其中包含一个base64编码的PNG图像我试图将其解析为某种类型的对象。。目前,我正在使用
nsdirectories
NSArray
,但我目前这样做并不成功

这是我的解析委托的一部分:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    if([elementName isEqualToString:@"GUI"]){
        parsedGUIMutableDictionary = [[NSMutableDictionary alloc] initWithDictionary:attributeDict];
    }
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{

    if ([elementName isEqualToString:@"GUI"]) {
        [parsedDataArrayOfDictionaries addObject:parsedGUIMutableDictionary];

    }


}
一旦这样做了,就没有值保存到字典中,所以它只是空的。。。我在if语句和输入第一个if语句时都添加了断点 属性指令为空

这就是xml的外观:

<IC>

  <Reps>

    <GUI>iVBORw0KGgoAAAANSUhEUgAAAiwAAAFKCAMAAAF+68SXAAADAFBMVEUAAAAAADMAAGYAAJkAAMwA

AP8AMwAAMzMAM2YAM5kAM8wAM/8AZgAAZjMAZmYAZpkAZswAZv8AmQAAmTMAmWYAmZkAmcwAmf8A

zAAAzDMAzGYAzJkAzMwAzP8A/wAA/zMA/2YA/5kA/8wA//8zAAAzADMzAGYzAJkzAMwzAP8zMwAz

MzMzM2YzM5kzM8wzM/8zZgAzZjMzZmYzZpkzZswzZv8zmQAzmTMzmWYzmZkzmcwzmf8zzAAzzDMz

zGYzzJkzzMwzzP8z/wAz/zMz/2Yz/5kz/8wz//9mAABmADNmAGZmAJlmAMxmAP9mMwBmMzNmM2Zm

M5lmM8xmM/9mZgBmZjNmZmZmZplmZsxmZv9mmQBmmTNmmWZmmZlmmcxmmf9mzABmzDNmzGZmzJlm

zMxmzP9m/wBm/zNm/2Zm/5lm/8xm//+ZAACZADOZAGaZAJmZAMyZAP+ZMwCZMzOZM2aZM5mZM8yZ

M/+ZZgCZZjOZZmaZZpmZZsyZZv+ZmQCZmTOZmWaZmZmZmcyZmf+ZzACZzDOZzGaZzJmZzMyZzP+Z

/wCZ/zOZ/2aZ/5mZ/8yZ///MAADMADPMAGbMAJnMAMzMAP/MMwDMMzPMM2bMM5nMM8zMM//MZgDM

ZjPMZmbMZpnMZszMZv/MmQDMmTPMmWbMmZnMmczMmf/MzADMzDPMzGbMzJnMzMzMzP/M/wDM/zPM

/2bM/5nM/8zM////AAD/ADP/AGb/AJn/AMz/AP//MwD/MzP/M2b/M5n/M8z/M///ZgD/ZjP/Zmb/

Zpn/Zsz/Zv//mQD/mTP/mWb/mZn/mcz/mf//zAD/zDP/zGb/zJn/zMz/zP///wD//zP//2b//5n/

/8z///8AAAANDQ0aGhooKCg1NTVDQ0NQUFBdXV1ra2t4eHiGhoaTk5OhoaGurq67u7vJycnW1tbk

5OTx8fH///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAABGUgBlAAAACXBIWXMAAAsSAAALEgHS3X78AAAACXRFWHRDb21tZW50AACJKo0G

AAALi0lEQVR4nO2da3LiOBRGU8UO2EzvL396CbORbCIrcJVN3p0HXsXwatrAZ1uWr2TJPocehhAh

Xz4fhCMU564w4W5A24cHk25qm246GNLNyqabDvKtJv9uOvKcppsBPU3QjY9+s69mdSKNanbcF8lk

M303w6CbK9b//g3o5semmrJMqpsqqWqidtPVrI8h3Xw7dTOGOXYzoJe6/SB90KG+RS1F7dzL/YBe

/WqhF3rJffsdfff5Yq1eLXrpOWqidtPVrI8h3Xw7dWqidtPVrI8h3Xw7dWqidPaL3kuVUC1Ovbz1

Hn/39vLLoZfgh9/z6+WahwNDHxWmlsKnlFC1dH080EqoWnygFo1bLe0/67UwbE79RH65HBnwZBeV

y4GVI1Fq8diII5619D3vOL6s/LfVx7haWktaeC62UIuGWjTUosm6loBQi4ZaNHdfB74tGfwTzN9a

Tv/flLaMqcWUsuyYT2snTC2VVzCBckmpllnuo6ddxJuRWNXy5vmabOIzxtx93PJcVZW425l3z2eS

1HvA1AU0mH0ttde0d8g5+MGPClNL7VNKwM8Dhj8oUC0dy/zbCfbZhMdjMqrFa250/7gQtXhVUoTJ

xauQYim1DC9pGbUMh1o0oWsZ8rnaknIZwuJqcfy4cXG5OLLQWvqWqONLC9SiiV5Lx+TTonPpgFpk

G8a6Fqjl1DChY6nrhtSSai3naawEfPnXnFqohVrGQy0aatFQi4ZaNPnUcv5Vz1+Nf8c1bd+2a9r6

a9Eccqk353JNKLtradsXp/u/jZfXbUfUYsuuGGqhFpNa1tRCLdQSuxaDZaobw1o6fs/fjYRqGb+P

1la1lH65iPW3VVW9jVm/W37a7SML8jn21lCLZgm12PPQIPjG8omlkYvv71q5k1EsRbxUsoqliJZK

XrEUsVLJLJYiUiq5xeL1buvBuFgCnnmlhTxiuY8azGqVSSxGVbhDLBJikWQXi+tJuMaRXSxxIBYJ

sUjyjsX3d1V7NsdxSwvEIiEWyVxiWXn+SZGWzRGL3Nx8YjGFWCRzjMUgolnGMnLWakaHc9jS24RY

ZBNikU0MZq3mHosnxCIhFsmiYnGcteK4pQ1ikRCLZKGxdE7PzHS+hVhkE4PpGWKREItsTiy3s1bL

PZzDFq/mxEIs7s2JhVjcm2cRS3yIRUIsEmKREIuEWCTEIiEWCbFIiEUyJpb12vW6uHv5S/n8ki5V

Wf2MimXg7m82/yw3P/++WludBc6Kr3I7SSxJc/rLscRyyemUf8Ryyf6PxhLLDftMKmK5xvtFdHrH

HfagjGLxfBHNPRbPF9H8Y8GWG3gRSXgRSZJ8EdX1dkc9IUnG8nYsavQZScdCLIotsQjKT4+foI1j

uZhvSSCWp3J/HSuWj/csLttTvczlSohFQiwSYpEQy5RkE0vNSaclMVPJKJaaWCQRz1CeUyx1PFly

iqWIJ0tWsdTRZMkqliKaLHnFUseSJa9YiliyZBZLHUmWzGIpIsmSXSyRtkMsEmKRjIwlzFmUW7d2

Tyxqa7nEEhtikRCLhFgkxCIhFkl2sVieiryN+wxjiUJ+sWCLIs7hLrFIiEVCLBJikWQdS7iI8o4l

0N8szXC+hVgkvIgkxCIhFgmxSIhFQiyS9ljsQsp8YsHgD+7MZxpK3y5qbBG3bSEWCbFIiEVCLBJi

kcwzlpGrhOY630IsYSAWCbFIiEVCLBJikcw9Fq/lMPOfWFj8NFRbc2zpaT4AYpEQi4RYJMQiWVIs

AyJaVCyuq4TmP99CLBbN/0IsEmKREIuEWCTEIlluLB0PXtbEwoDFU//ZFNtLarF0Lp5ari09EIuE

WCTEIiEWCbFIiKW4XSXEfMvxG8TiBrFIiEVCLBJikRCLhFgkxCIhFgmxSIhFQiyS7GKJA7FIiEVC

LBJikRCLhFgkxCIhFgmxSIhFQiwSYpEQi4RYJMQiIRYJsUiIRTImlvWv9fX1Wl8vKpZi7Xxd3H2f

+Pra/UuV7+ixPJ+oqpeX58blZX359aSX57J8GxTLXfM5+sRyftBb+Sk6SYb38k8xRSxFsSnfG338

SiyXYvM0TSx7Y/6xLpNjM1Est50kwyGXd2K54ugLsVxBLBJikRCLhFgkxCIZGUtdEEtLLEXjTmI5

QCx7OmIpGt8ilqsGxNIBsUiIpQNikRBLB8QiIZYOiEWyhFj8IZaBj7+IZVvv2U5IkrGUZbW7lJuJ

</GUI>

  </Reps>

</IC>

任何帮助都将不胜感激。

您可能不想麻烦使用
NSDictionary
。我不在Mac电脑上,但请尝试以下操作:

  • 在代理()中实现
    foundCharacters
    回调
  • foundCharacters
    实现中,检查是否介于
    didStartElement
    didEndElement
    调用GUI元素之间:如果是,则将字符附加到
    NSMutableString
    实例
  • 然后,在
    didEndElement
    中,可以使用
    NSMutableString
    初始化
    NSData
    实例,方法如下

  • 这应该会让你达到你需要的位置。

    苹果文档中有一些东西,但我不确定他们对可变字符串值-(void)解析器:(NSXMLParser*)解析器foundCharacters:(NSString*)字符串{if(!currentStringValue){//currentStringValue是NSMutableString实例变量NSMutableString*currentStringValue=[[NSMutableString alloc]initWithCapacity:50];}[currentStringValue appendString:string];}您不希望每次都创建一个新实例:
    foundCharacters
    可以根据它获取的块多次调用。在
    didStartElement
    中创建实例,然后在
    foundCharacters
    中调用
    appendString
    [Base64 initialize];
    NSData *data = [Base64 decode:img];
    cell.image.image = [UIImage imageWithData:data];