【发布时间】:2013-10-04 10:30:27
【问题描述】:
我创建了一个名为tempArray 的NSMutableArray,其中包含我想要的三个元素的字符。目前,当我设置断点并让解析器运行时,tempArray 每次都会正确更改,并为我提供所需的信息(纬度、经度、名称)。
然后,当解析器为“a-location”调用didEndElement... 方法时,我将tempArray 添加到名为parsedNearMe 的主NSMutableArray,它应该包含所有a-locations(每个都有-名称,纬度,经度)。
这一切都按预期工作。
问题:
每次我将tempArray 添加到parsedNearMe 时,它都会添加新对象,但会将所有现有对象设置为新对象的值。
我认为是什么问题
我认为问题在于,因为我将当前元素设置为tempArray,并且每次我覆盖parsedNearMe 中的每个对象,因为每个对象都是指向同一个tempArray 的指针。
我尝试或研究但没有成功的可能解决方案
- 以某种方式清除指针,以便我可以重用tempArray(或重新初始化它?)
- 每次动态创建一个新名称来代替tempArray(不要认为在Objective-C中是可能的)
感谢您的任何建议,因为我已经在这方面花费了很多时间,我已经在做圈子了。此外,我希望当前架构能够正常工作(获取一个大型数组数组,因此我可以调用其中的 1 个数组并获取该注释所需的所有数据)。
我的代码如下:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ( [elementName isEqualToString:@"a-location"])
{
if (!tempArray)
tempArray = [[NSMutableArray alloc] init];
return;
}
if ( [elementName isEqualToString:@"latitude"] )
{
latitude = [[NSMutableString alloc] init];
return;
}
if ( [elementName isEqualToString:@"longitude"] ) {
longitude = [[NSMutableString alloc] init];
return;
}
if ( [elementName isEqualToString:@"the-name"] ) {
myName = [[NSMutableString alloc] init];
return;
}
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
currentString = [[NSMutableString alloc]init];
[currentString appendString:string];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ( [elementName isEqualToString:@"latitude"] ) {
[tempArray addObject:currentString];
return;
}
if ( [elementName isEqualToString:@"longitude"] ) {
[tempArray addObject:currentString];
return;
}
if ( [elementName isEqualToString:@"the-name"] ) {
[tempArray addObject:currentString];
return;
}
if ( [elementName isEqualToString:@"a-location"])
{
[parsedNearMe setObject:tempArray forKey:[NSDate date]];
[tempArray removeAllObjects];
}
}
【问题讨论】:
标签: ios objective-c nsmutablearray nsxmlparser