0
將對象添加到NSMutablearray時遇到意外的行爲。基本上,我想在數組的末尾添加一個對象。數組中的所有對象都應該不同。但我所看到的是數組中的所有對象都等於插入的最後一個對象。我已經包含了相關的代碼:NSMutablearray意外的行爲:所有對象相等於最後添加的對象
_trafficArray = [[NSMutableArray alloc] init];
int _index = -1;
int _currentIndex = 0;
int _reportCount = 0;
TrafficReport *_report = [[TrafficReport alloc] init];
while (true) {
if (!xmlTextReaderRead(_reader)) break;
switch (xmlTextReaderNodeType(_reader)) {
case XML_READER_TYPE_ELEMENT:
temp = (char *)xmlTextReaderConstName(_reader);
currentTagName = [NSString stringWithCString:temp encoding: NSUTF8StringEncoding];
if([currentTagName isEqualToString:@"Title"])
{
_index++;
temp = (char *)xmlTextReaderConstName(_reader);
currentTagName = [NSString stringWithCString:temp encoding: NSUTF8StringEncoding];
xmlTextReaderRead(_reader);
temp = (char*)xmlTextReaderConstValue(_reader);
currentTagValue = [NSString stringWithCString:temp
encoding:NSUTF8StringEncoding];
_report.title = currentTagValue;
_reportCount++;
}
if ([currentTagName isEqualToString:@"Description"]) {
temp = (char *)xmlTextReaderConstName(_reader);
currentTagName = [NSString stringWithCString:temp encoding: NSUTF8StringEncoding];
xmlTextReaderRead(_reader);
temp = (char*)xmlTextReaderConstValue(_reader);
currentTagValue = [NSString stringWithCString:temp
encoding:NSUTF8StringEncoding];
_report.description = currentTagValue;
_reportCount++;
}
if (_reportCount==2) {
_reportCount = 0;
NSLog(@"updated! with index = %d and title = %@\n\n", _index, _report.title);
[_trafficArray insertObject:_report atIndex:_index];
[_report release];
TrafficReport *_report = [[TrafficReport alloc] init];
}
continue;
default:continue;
}
}
這是正確的答案。我錯過了'if'語句中的分配,並且@omz完全正確,您聲明瞭一個新的變量'_report'(暫時)隱藏,但不替換第一個變量。另外,請確保最後一個TrafficReport實例已正確釋放 - 現在我認爲您正在泄漏一個對象。 – Caleb
謝謝,這個伎倆。我相對較新的IOS和客觀的C,所以這種問題可以超過我的頭。 – scord