我创建了一个名为tempArray
的NSMutableArray
,它包含我想要的三个元素的字符。目前,当我设置断点并让解析器运行时,每次都会正确更改,并为我提供我需要的信息(纬度,经度,名称)。addObject覆盖的所有对象:使用NSXMLParser时
然后,当分析器呼吁“一个定位”的didEndElement...
方法,我想补充tempArray
名为parsedNearMe
主要NSMutableArray
,应保存所有的A位置(每个有名称,经纬度) 。
这一切都按预期工作。
问题: 每次我加tempArray
到parsedNearMe
,它增加了新的对象,而是将所有现有的对象到新对象的值。
我觉得是问题 我觉得现在的问题是,因为我需要的元素设置为tempArray
,每一次我在覆盖每parsedNearMe
对象,因为每个对象是指向同tempArray
。
可能的解决方案我已经尝试或没有运气研究 -Somehow清除指针,以便我可以重复使用tempArray
(或重新初始化吗?) -dynamically代替每次tempArray
创建一个新的名称(不要” t认为是可能的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];
}
}
结构非常好的答案,谢谢。 虽然我还没有尝试过你的解决方案,但我相信这将解决我的问题:tempArray = nil; 我也同意你的设计建议。实际上,我原本只有两个NSMutableArrays,但最终以当前的字典设计结束了,因为我只是想了很多方法,并且认为使用NSDictionary和键可以解决每次覆盖对象的问题。 – Joel
此外,这也是为什么我试图把他们的关键随机日期。出于某种原因,我认为给它一个唯一的名字(日期)会阻止对象被覆盖。我也尝试在0开始一个计数器,并使用数字作为关键。感谢您清除这:)。 – Joel