我使用NSXMLParser解析YouTube的API,然后获取我想要的所有内容并将其放入名为Video的类中。当我从 parserDidEndElement 中写入该类时,我结束该视频,我将该类写入 NSMutableArray 。然后我NSLog记录到数组中的视频的标题。每个视频都有所不同。我使用 addObject:方法将视频添加到数组中。但是,当我使用 parserDidEndDocument 时,我使用for循环来读取数组,并且所有条目都添加了最后一个对象的相同标题值!这是怎么回事?
我在didEndElement中调用它:
Video *tempVideo = [Video new];
NSString *title = @"";
tempVideo = [allVideos objectAtIndex:[allVideos count]-1];
title = tempVideo.videoTitle;
NSLog(@"1videoTitle = %@", title);
为每个元素返回 1videoTitle =(视频标题)
我在didEndDocument中调用它:
int i;
Video *tempVideo = [Video new];
NSString *title = @"";
for(i=0;i<[allVideos count];i++){
tempVideo = [allVideos objectAtIndex:i];
title = tempVideo.videoTitle;
NSLog(@"videoTitle = %@", title);
}
为每个元素返回 videoTitle =(所有19个视频的最后添加的视频标题)
答案 0 :(得分:3)
tc的回答是正确的,但让我重新说一句。
您缺少Objective-C的基本细节。
Video *tempVideo = [Video new];
tempVideo = [allVideos objectAtIndex:[allVideos count]-1];
第一行声明一个变量tempVideo
,它是指向Video
类实例的指针,并为其分配对新分配的{{{{{{ 1}} class。
第二行重新指定Video
作为tempVideo
数组中对象的引用。它不是对象的副本,而是对数组中同一对象的引用。第一个实例 - 来自allVideos
的实例 - 实际上已泄露。
未显示的是将视频对象添加到阵列的位置和方式。
答案 1 :(得分:1)
Video * tempVideo
定义了一个名为“tempVideo”的变量,它是一个指向视频的指针。[Video new]
制作了一个新视频。tempVideo = [allVideos objectAtIndex:[allVideos count]-1];
会覆盖您的指针(泄漏步骤2中创建的视频)。如果您了解值和引用之间的区别,这会有所帮助,但这超出了本答案的范围。在没有看到你的代码的情况下,很难分辨出发生了什么,但我怀疑你是在重复地向同一个视频对象添加(指向)数组。