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