Iphone NSMutablearray意外行为:所有对象都等于添加的最后一个对象
向NSMutablearray添加对象时遇到意外行为。基本上,我想在数组的末尾添加一个对象。数组中的所有对象都应该不同。但我看到的是,数组中的所有对象都等于插入的最后一个对象。我已包括相关代码:Iphone NSMutablearray意外行为:所有对象都等于添加的最后一个对象,iphone,objective-c,ios,nsmutablearray,Iphone,Objective C,Ios,Nsmutablearray,向NSMutablearray添加对象时遇到意外行为。基本上,我想在数组的末尾添加一个对象。数组中的所有对象都应该不同。但我看到的是,数组中的所有对象都等于插入的最后一个对象。我已包括相关代码: _trafficArray = [[NSMutableArray alloc] init]; int _index = -1; int _currentIndex = 0; int _reportCount = 0; TrafficReport *_report =
_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;
}
}
这是一个范围问题。发布
\u report
后,在if语句的范围内声明一个新的\u report
对象。即使它与您在while循环之前声明的名称相同,它也引用了不同的变量。在赋值之前删除声明(TrafficReport*
),为现有的\u report
变量赋值。这是正确的答案。我错过了if
语句中的分配,@omz完全正确,您正在声明一个新变量\u report
,该变量(短暂地)隐藏,但不替换第一个变量。另外,请确保上一个TrafficReport实例已正确发布--现在我认为您正在泄漏一个对象。谢谢,这就成功了。我对ios和objective c比较陌生,所以这种问题可能会超出我的头脑。