iphone - 为什么我只能从 iPhone 中的 URL 查看 xml 文件中最后一个元素的 UIImage

标签 iphone ios ios6

当我从 URL 检索 XML 文件时,我可以解析 XML 文件中的所有元素并在日志文件中查看,我的解析代码如下所示,

-(id) loadXMLByURL:(NSString *)urlString{
tweets  = [[NSMutableArray alloc] init];
NSURL *url = [NSURL URLWithString:urlString];
NSData *data = [[NSData alloc] initWithContentsOfURL:url];
parser = [[NSXMLParser alloc] initWithData:data];
parser.delegate = self;
[parser parse];
return self;}


-(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
if([elementName isEqualToString:@"Products"]){
currentTweet = [egsBase alloc];}}


-(void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if([elementName isEqualToString:@"img"]){
currentTweet.img=[UIImage imageWithData: [NSData dataWithContentsOfURL: [NSURL URLWithString:currentNodeContent]]];}
if ([elementName isEqualToString:@"Products"]) {
[tweets addObject:currentTweet.img];
currentTweet = nil;
currentNodeContent = nil;}}


- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
 currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];}

我使用类名作为 XmlParsing 进行解析。在 Controller 类中,我将类文件 XmlParsing 实现为 XmlParsing xmlparser; 现在在 viewDidLoad() 函数中,我使用这样的代码,

- (void)viewDidLoad{
[super viewDidLoad];
xmlParser = [[XMLParsing alloc] loadXMLByURL:@"http://images.com/Products.xml"];
UIImage *currentImage = [[xmlParser tweets] objectAtIndex:0];
customimage.image = currentImage;}

这里的 customimage 是 UIImageView 的引用,现在的问题是我只能获取最后一个元素值并显示在 Storyboard中连接的 UIImageView 中(即)以便更好地理解它仅显示最后一个元素图像,而不是我在元素中使用的先前元素。如何解决这个问题?我哪里做错了。请给我建议。

XML 结构

<Products>
 <products id="1">
   <img>http://images.com/images/Main_pic.png</img>
 </products>
 <products id="2">
  <img>http://images.com/images/image1.png</img>
 </products>
</Products>

我的 NSLog 显示解析 XML 文件,

images <UIImage: 0x71529a0>
images <UIImage: 0x74a6750>

当我打印以检查我得到的图像时,它显示当前图像为,

Current,<UIImage: 0x74a6750>

在这里你可以看到当前图像只显示最后一个元素而不是前一个元素

最佳答案

- (void)viewDidLoad
{
 1) [super viewDidLoad];
 2) xmlParser = [[XMLParsing alloc] loadXMLByURL:@"http://images.com/Products.xml"];
 3) UIImage currentImage = [[xmlParser tweets] objectAtIndex:0];
 4) customimage.image = currentImage;
}

为了便于理解,我添加了行号:

第 3 行:你总是得到一张新图像(我说的对吗?)

第 4 行:每当你得到一个新图像时,你就将该图像设置为相同的 imageview(customimage) 由于以前的图像被替换 与新的。

理想情况下,您应该将每个新图像设置为各自的 ImageView 。

如果您尝试在表格 View 中加载这些图像 --- 然后 ImageView 的名称保持不变,但实际上对象不同,因此您应该通过在 cellForRowAtIndexPath 中分配的标签访问每个单元格的 ImageView 。

更新代码

-(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{
if([elementName isEqualToString:@"products"])
{
        currentTweet = [egsBase alloc];}}
}

-(void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
  if([elementName isEqualToString:@"img"])
   {
    currentTweet.img=[UIImage imageWithData: [NSData dataWithContentsOfURL: [NSURL URLWithString:currentNodeContent]]];
    [tweets addObject:currentTweet.img];
   }
 if ([elementName isEqualToString:@"products"])
  {
   currentTweet = nil;
   currentNodeContent = nil;
  }
}

Desc :在解析时,当“products”被发现为开始元素并创建对象时,当找到结束元素时,图像与对象相关联并被添加到数组中。 我看到的错误是:您在解析条件中使用的是“产品”而不是“产品”

希望这个想法有帮助 :)

关于iphone - 为什么我只能从 iPhone 中的 URL 查看 xml 文件中最后一个元素的 UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13696406/

相关文章:

php - 为什么 -stringWithContentsOfURL 不返回我的 php echo?

iphone - iphone 6网站的响应能力

ios - 根据分辨率调整图像大小

ios - [UICollectionViewLayout dealloc] 中的奇怪 EXC_BAD_ACCESS

ios - foursquare 如何将其 map View 从表格标题动画化为全屏?

objective-c - 一个 View 一次最多只能与一个 View Controller 相关联(UISegmentedControl)

cocoa-touch - 通过 "back"按钮在 UINavigationController pop 上使用自定义 segue 展开

增强现实中的 iPhone 标记检测

ios - 如何为 ImagePicker 制作圆形编辑区域而不是矩形?

ios - NSDataDetector 无法检测到无效的电话号码