Objective c IOS中的XML解析在标签中显示空值?

Objective c IOS中的XML解析在标签中显示空值?,objective-c,ios,xml,nsxmlparser,nsmutablestring,Objective C,Ios,Xml,Nsxmlparser,Nsmutablestring,我正在使用NSXMLParserDelegate进行XML解析。当我打印标签中的值时,我得到的是空值。我使用的是internet上获得的简单XML文件。你也可以检查该文件中的内容。任何人请帮助。这是我的代码 #import "xmlViewController.h" @implementation xmlViewController @synthesize label; - (void)didReceiveMemoryWarning { [super didReceiveMemory

我正在使用NSXMLParserDelegate进行XML解析。当我打印标签中的值时,我得到的是空值。我使用的是internet上获得的简单XML文件。你也可以检查该文件中的内容。任何人请帮助。这是我的代码

#import "xmlViewController.h"

@implementation xmlViewController
@synthesize label;

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"http://www.bonifacedesigns.com/tuts/xmltest.xml"]];
    receivedData=[[NSMutableData alloc]initWithContentsOfURL:url];
    dataParser=[[NSXMLParser alloc]initWithData:receivedData];
    dataParser.delegate=self;
    [dataParser parse];
}

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
//    if(!xmlString){
//        
//    }else
//    {
//        [xmlString setString:@""];
//    }
  if([elementName isEqualToString:@"elements"])
  {
      xmlString=[NSMutableString alloc];
      [xmlString setString:@""];
  }

}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    xmlString= (NSMutableString *)[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{

        if([elementName isEqualToString:@"element"]){

            NSString *string=xmlString;
            [xmlArray addObject:string];
            label.text=[NSString stringWithFormat:@"%@",xmlArray];

       }

}

@end
这是我的XML文件…我想打印解析后的XML数据!在我的标签中。请帮助我。我已经编辑了代码并检查了

<elements>
<element myData="XML Data Parsed!"/>
</elements>
我得到一个错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to mutate immutable object with setString:'
*** First throw call stack:
(0x13ba052 0x154bd0a 0x1362a78 0x13629e9 0x1387970 0x2a26 0x9e1a35 0x5171532 0x9e002d 0x26b8 0xd764e 0x37a73 0x37ce2 0x37ea8 0x3ed9a 0xfbe6 0x108a6 0x1f743 0x201f8 0x13aa9 0x12a4fa9 0x138e1c5 0x12f3022 0x12f190a 0x12f0db4 0x12f0ccb 0x102a7 0x11a9b 0x2238 0x2195 0x1)
terminate called throwing an exception

我想问题出在这一行:

xmlString== (NSMutableString *)[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
=
更改为
=


希望不需要这种解释。

代码中似乎有几个错误

行中的可变字符串
xmlString
未正确初始化:

xmlString = [NSMutableString alloc]; // wrong
这应该是这样的:
xmlString=[[NSMutableString alloc]initWithCapacity:X]

// wrong
xmlString == (NSMutableString *)[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
此外,当解析器找到字符时,您将替换整个现有的可变字符串,而不是将它们附加到现有内容中,或者尝试进行替换,因为根据代码,您只需比较内存地址并浪费结果(
=

这应该是这样的:

[xmlString appendString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];
最后,在
didEndElement
中,我不确定您想要实现什么,但是您将字符串对象引用添加到数组中,然后设置标签文本以显示数组的内容。。。只要可变数组被很好地分配和初始化(我真的不确定),标签应该至少显示数组内容。但是您可以考虑“刷新”可变字符串(<代码> [XMLString String:@ ] ];< /C> >,不要在每个元素上分配它。

编辑


attributeDict
将属性名称映射为键及其值。我想您的属性值可以通过
[attributeDict objectForKey:@“myData”]访问

[xmlString setString:@”“];在哪里添加这一行。我已经在代码中添加了这一行。检查是否正确?将其添加到
didEndElement
中。请参阅我的编辑以处理AttributeOK,但必须在对字符串执行某些操作后写入
setString
。另外,你确定你真的有可变字符串吗?我确定有可变字符串..我在接口文件中初始化了..如果没有,我将得到一个错误..那么我应该如何处理该字符串?(必须在对字符串执行某些操作后写入setString)
[xmlString appendString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];