我使用一个NSXMLParser来解析YouTube的API,得到我想要的所有内容,并将其放入一个名为视频的类中。当我从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);它为每个元素返回1个视频title=(视频标题)
我在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个视频的视频标题)
发布于 2010-09-13 01:53:49
tc的回答是正确的,但让我换个说法。
你错过了目标的一个非常基本的细节-C。
Video *tempVideo = [Video new];
tempVideo = [allVideos objectAtIndex:[allVideos count]-1];第一行声明了一个变量tempVideo,该变量是指向Video类实例的指针,并向它分配对新分配的Video类实例的引用。
第二行重新分配tempVideo作为来自allVideos数组的对象的引用。它不是对象的副本,而是对数组中相同对象的引用。第一个例子--来自[Video new]的一个--实际上是被泄露出去的。
未显示的是如何将视频对象添加到数组中的位置和方式。
发布于 2010-09-13 00:49:46
Video * tempVideo定义了一个名为"tempVideo“的变量,该变量是指向video.[Video new]的指针,它创建了一个新的video.tempVideo = [allVideos objectAtIndex:[allVideos count]-1];覆盖您的指针(泄漏在步骤2中创建的视频)。如果您理解了值和引用之间的区别,这会有所帮助,但这超出了这个答案的范围。如果没有看到您的代码,就很难知道发生了什么,但我怀疑您正在重复向数组中添加(指向)相同的视频对象。
https://stackoverflow.com/questions/3697072
复制相似问题