我創建了一個名爲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