NSXMLParser values not being retained.

Posted by user574947 on Stack Overflow See other posts from Stack Overflow or by user574947
Published on 2011-01-17T15:15:20Z Indexed on 2011/01/17 17:54 UTC
Read the original article Hit count: 199

Filed under:
|
|

This is similar to my previous question. I didn't get an answer, maybe by changing the question I might get an answer.

Here is my parsing code:

-(void) parser:(NSXMLParser *) parser  didStartElement:(NSString *) elementName  
                                          namespaceURI:(NSString *) namespaceURI  
                                         qualifiedName:(NSString *) qName   
                                            attributes:(NSDictionary *) attributeDict 
{
    if ([elementName isEqualToString:kimgurl]
        || [elementName isEqualToString:kone_x]
        || [elementName isEqualToString:kone_y]
        || [elementName isEqualToString:kone_radius]
        || [elementName isEqualToString:ktwo_x]
        || [elementName isEqualToString:ktwo_y]
        || [elementName isEqualToString:ktwo_radius]) 
    {
        elementFound = YES;
        theItems = [[Items alloc] init];
    }
}


- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
                                      namespaceURI:(NSString *)namespaceURI
                                     qualifiedName:(NSString *)qName 
{   
    if([elementName isEqualToString:kimgurl])
    {
        theItems.imageURL = self.currentValue;
        [self.currentValue setString:@""];
    }

    else if([elementName isEqualToString:kone_x])
    {
        theItems.iOne_X = self.currentValue;
        [self.currentValue setString:@""];
    }

    else if([elementName isEqualToString:kone_y])
    {
        theItems.iOne_Y = self.currentValue;
        [self.currentValue setString:@""];
    }

    else if([elementName isEqualToString:kone_radius])
    {
        theItems.iOne_Radius = self.currentValue;
        [self.currentValue setString:@""];
    }

    else if([elementName isEqualToString:ktwo_x])
    {
        theItems.iTwo_X = self.currentValue;
        [self.currentValue setString:@""];
    }

    else if([elementName isEqualToString:ktwo_y])
    {
        theItems.iTwo_Y = self.currentValue;
        [self.currentValue setString:@""];
    }

    else if([elementName isEqualToString:ktwo_radius])
    {
        theItems.iTwo_Radius = self.currentValue;
        [self.currentValue setString:@""];
    }

}

-(void) parserDidEndDocument:(NSXMLParser *)parser 
{   
    NSLog(@"enddocument: %@", theItems.imageURL);
}


-(void)parser:(NSXMLParser *) parser foundCharacters:(NSString *)string 
{
    if (elementFound == YES) {
        if(!currentValue)
        {
            currentValue = [NSMutableString string];
        }

        [currentValue appendString: string];
    }
}

When I get to parserDidEndDocument. The theItems class is empty.

Here is Items.h

#import <Foundation/Foundation.h>


 @interface Items : NSObject {
     @private
     //parsed data
     NSString *imageURL;
     NSString *iOne_X;
     NSString *iOne_Y;
     NSString *iOne_Radius;
     NSString *iTwo_X;
     NSString *iTwo_Y;
     NSString *iTwo_Radius;
 }

@property (nonatomic, retain) NSString *imageURL;
@property (nonatomic, retain) NSString *iOne_X;
@property (nonatomic, retain) NSString *iOne_Y;
@property (nonatomic, retain) NSString *iOne_Radius;
@property (nonatomic, retain) NSString *iTwo_X;
@property (nonatomic, retain) NSString *iTwo_Y;
@property (nonatomic, retain) NSString *iTwo_Radius;


@end

here is Items.m

#import "Items.h"


@implementation Items
@synthesize imageURL;
@synthesize iOne_X;
@synthesize iOne_Y;
@synthesize iOne_Radius;
@synthesize iTwo_X;
@synthesize iTwo_Y;
@synthesize iTwo_Radius;

-(void)dealloc
{
    [imageURL release];
    [iOne_X release];
    [iOne_Y release];
    [iOne_Radius release];
    [iTwo_X release];
    [iTwo_Y release];
    [iTwo_Radius release];  
    [super dealloc];
}
@end

here is my RootViewController.h

#import <UIKit/UIKit.h>

@class Items;

@interface RootViewController : UIViewController <NSXMLParserDelegate> {
    NSMutableData *downloadData;
    NSURLConnection *connection;

    BOOL elementFound;
    NSMutableString *currentValue;
    NSMutableDictionary *pictures;

    //---xml parsing---
    NSXMLParser *xmlParser;

    Items *theItems;
    NSMutableArray *aItems;

}

@property (nonatomic, retain) Items *theItems;
@property (nonatomic, retain) NSMutableArray *aItems;
@property (nonatomic, retain) NSMutableString *currentValue;

@property (nonatomic, retain) NSMutableData *downloadData;
@property (nonatomic, retain) NSURLConnection *connection;

@end

xml file example

<?xml version="1.0" encoding="utf-8"?>
<data>
    <test>
        <url>url</url>
        <one_x>83</one_x>
        <one_y>187</one_y>
        <one_radius>80</one_radius>
        <two_x>183</two_x>
        <two_y>193</two_y>
        <two_radius>76</two_radius>
    </test>
</data>

© Stack Overflow or respective owner

Related posts about iphone

Related posts about ios