首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用NSXMLParser,数组中的值都设置为最后一个条目

使用NSXMLParser,数组中的值都设置为最后一个条目
EN

Stack Overflow用户
提问于 2010-09-12 23:22:48
回答 2查看 1.1K关注 0票数 0

我使用一个NSXMLParser来解析YouTube的API,得到我想要的所有内容,并将其放入一个名为视频的类中。当我从parserDidEndElement内部写信给这个类时,当我结束这个视频时,我将这个类写到一个NSMutableArray.中。然后,我NSLog登录到数组中的视频的标题。对于每个视频来说,这是不同的。我使用addObject:方法向数组中添加视频。但是,当我使用parserDidEndDocument时,我使用一个for循环来读取数组,并且所有条目都有最后一个添加的对象的相同标题值!这里发生什么事情?

我在didEndElement中称之为:

代码语言:javascript
运行
复制
Video *tempVideo = [Video new];
NSString *title = @"";
tempVideo = [allVideos objectAtIndex:[allVideos count]-1];
title = tempVideo.videoTitle;
NSLog(@"1videoTitle = %@", title);

它为每个元素返回1个视频title=(视频标题)

我在didEndDocument中称之为:

代码语言:javascript
运行
复制
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个视频的视频标题)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-13 01:53:49

tc的回答是正确的,但让我换个说法。

你错过了目标的一个非常基本的细节-C。

代码语言:javascript
运行
复制
Video *tempVideo = [Video new];
tempVideo = [allVideos objectAtIndex:[allVideos count]-1];

第一行声明了一个变量tempVideo,该变量是指向Video类实例的指针,并向它分配对新分配的Video类实例的引用。

第二行重新分配tempVideo作为来自allVideos数组的对象的引用。它不是对象的副本,而是对数组中相同对象的引用。第一个例子--来自[Video new]的一个--实际上是被泄露出去的。

未显示的是如何将视频对象添加到数组中的位置和方式。

票数 3
EN

Stack Overflow用户

发布于 2010-09-13 00:49:46

  1. Video * tempVideo定义了一个名为"tempVideo“的变量,该变量是指向video.
  2. [Video new]的指针,它创建了一个新的video.
  3. tempVideo = [allVideos objectAtIndex:[allVideos count]-1];覆盖您的指针(泄漏在步骤2中创建的视频)。

如果您理解了值和引用之间的区别,这会有所帮助,但这超出了这个答案的范围。如果没有看到您的代码,就很难知道发生了什么,但我怀疑您正在重复向数组中添加(指向)相同的视频对象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3697072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档