【问题标题】:Objective-C append to string not working NSXMLParserObjective-C 附加到字符串不起作用 NSXMLParser
【发布时间】:2013-08-01 14:02:59
【问题描述】:

我正在尝试解析一些 XML 数据并将解析后的数据附加到 NSString 对象中。我已经使用 NSXMLParser 成功解析了 XML 数据,但是当我记录名为 arrayString 的字符串的值时,我只得到了第一个 <name> 的值,而不是所有这些值。我做错了什么?

这是我的代码:

(void)parseWithData:(NSData *)data {
parser = [[NSXMLParser alloc] initWithData:data];
[parser setDelegate:self];
//You might want to consider additional params like:
[parser setShouldProcessNamespaces:NO];
[parser setShouldReportNamespacePrefixes:NO];
[parser setShouldResolveExternalEntities:NO];
//And then finally (which activates the delegates):
[parser parse];
NSLog(@"The content of the array is%@",childElement);

}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI             qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
 currentElement = nil;
 currentElement = [elementName copy];
 if ([elementName isEqualToString:@"row"]) {
    //This means the parser has entered the XML parent element named: xmlParentElement
    //All of the child elements that need to be stored in the array should have their own IVARs and declarations.
    childElement = [[NSMutableString alloc] init];
 }
 }

 - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
   //For all child elements, run this if statement.
    if ([currentElement isEqualToString:@"name"]) {
    [childElement appendString:string];
    NSLog(string);
    [arrayString stringByAppendingString:string];
   // NSLog(arrayString);


   }

我通过调用这些方法来解析数据:

  NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:data];
  [self parseWithData:data];

【问题讨论】:

  • 只有当第一个字符串有某个值时,您才能将任何字符串附加到字符串......它也可以是@"";NSString *str1 = @""; 那么你可以使用stringByAppendingString: 方法。

标签: ios parsing http


【解决方案1】:

stringByAppendingString 函数返回一个NSString。它不会改变接收器。

您需要修正您对stringByAppendingString 的使用。例如,在foundCharacters 中,替换为:

[arrayString stringByAppendingString:string];

有了这个:

arrayString = [arrayString stringByAppendingString:string];

苹果的documentation on stringByAppendingString

stringByAppendingString:

返回通过将给定字符串附加到接收器而生成的新字符串。

另外,在追加字符串时,别忘了在追加之前初始化字符串。

【讨论】:

  • 谢谢,现在arrayString的值为null
  • 但是为什么它的值为null呢?
  • @Coder101,什么变量是NULL?我认为arrayString 是问题所在。您可能需要修复在其他任何地方使用 stringByAppendingString 的问题,包括使用 childElement
  • @Coder101,是的。很高兴你想出来了。 :) 我更新了我的答案,包括为未来的读者进行初始化。
【解决方案2】:

我认为 stringByAppendingString 方法创建了一个新的 NSString。试试这个而不是那个:

arrayString = [arrayString stringByAppendingString:string];

【讨论】:

  • 是的,这就是@MarcusAdams 几分钟前所说的,但谢谢:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-03
  • 2011-08-29
  • 2012-11-09
  • 2011-03-13
  • 2015-08-20
  • 2012-01-02
  • 2015-02-10
相关资源
最近更新 更多