Ios 尝试使用NSXMLParser委托解析NSData时出错
我有一些xml,其中包含一个base64编码的PNG图像我试图将其解析为某种类型的对象。。目前,我正在使用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
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];