简体   繁体   English

如何检查阵列的内容? 使用ObjectiveC解析XML文件

[英]How can I check the content of the arrays? Parsing XML file with ObjectiveC

I have 3 classes-> 我有3个班级->

video { nameVideo, id, description, user... }  
topic {nameTopic, topicID, NSMutableArray videos; }  
category {nameCategory, categoryID, NSMUtableArray topics}  

And then in my app delegate I defined-> NSMutableArray categories; 然后在我的应用程序委托中,我定义了-> NSMutableArray类别;

I parse an XML file with this code. 我用此代码解析XML文件。 I try the arrays hierachy, and i think that i don't add any object on the arrays. 我尝试数组层次结构,我认为我不在数组上添加任何对象。 How can I check it? 我该如何检查? What's wrong? 怎么了?

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
    attributes:(NSDictionary *)attributeDict {

    if([elementName isEqualToString:@"Videos"]) {
        //Initialize the array.
        appDelegate.categories = [[NSMutableArray alloc] init];
    }


    else if ([elementName isEqualToString:@"Category"])
    {
        aCategory = [[Category alloc] init];

        aCategory.categoryID = [[attributeDict objectForKey:@"id"] integerValue];

        NSLog(@"Reading id category value: %i", aCategory.categoryID);

    }

    else if ([elementName isEqualToString:@"Topic"]) {
        aTopic = [[Topic alloc] init];

        aTopic.topicID = [[attributeDict objectForKey:@"id"] integerValue];

        NSLog(@"Reading id topic value: %i", aTopic.topicID);

    }

    else if ([elementName isEqualToString:@"video"]) {

        aVideo = [[Video alloc] init];

        aVideo.videoID = [[attributeDict objectForKey:@"id"] integerValue];
        aVideo.nameTopic = currentNameTopic; 
        aVideo.nameCategory = currentNameCategory; 

        NSLog(@"Reading id video value: %i", aVideo.videoID);

    }


    NSLog(@"Processing Element: %@", elementName);
}



- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {

    if(!currentElementValue)
        currentElementValue = [[NSMutableString alloc] initWithString:string];
    else
        [currentElementValue appendString:string];

    NSLog(@"Processing Value: %@", currentElementValue);

}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {

    if([elementName isEqualToString:@"Videos"]) 
        return; 

    if ([elementName isEqualToString:@"Category"]) {
        [appDelegate.categories addObject:aCategory];
         [aCategory release];
         aCategory = nil;
    }


    if ([elementName isEqualToString:@"Topic"]) {
        [aCategory.topics addObject:aTopic];
        //NSLog(@"contador: %i", [aCategory.topics count]);
        //NSLog(@"contador: %@", aTopic.nameTopic);

        [aTopic release];
        aTopic = nil;
    }        

    if ([elementName isEqualToString:@"video"]) {
        [aTopic.videos addObject:aVideo];
        NSLog(@"count number videos:  %i", [aTopic.videos count]); --> always 0
        NSLog(@"NOM CATEGORIA VIDEO:  %@", aVideo.urlVideo); --> OK

        [aVideo release];
        aVideo = nil;
    }

    if ([elementName isEqualToString:@"nameCategory"]) {
        //[aCategory setValue:currentElementValue forKey:elementName];
        aCategory.nameCategory = currentElementValue; 
        currentNameCategory = currentElementValue; 
    }

    if ([elementName isEqualToString:@"nameTopic"]) {
        aTopic.nameTopic = currentElementValue; 
        currentNameTopic = currentElementValue; 
    }


    else 
    [aVideo setValue:currentElementValue forKey:elementName];

    [currentElementValue release];
    currentElementValue = nil;

}

//xmlparser.h //xmlparser.h

@class TSCTerrassaAppDelegate, Category, Topic, Video; 
@interface XMLParser : NSObject {

    NSMutableString *currentElementValue; 
    NSMutableString *currentNameCategory;
    NSMutableString *currentNameTopic; 

    TSCTerrassaAppDelegate *appDelegate; 

    Video *aVideo;
    Topic *aTopic; 
    Category *aCategory; 
}

@property (nonatomic, retain)NSMutableString *currentNameCategory; 
@property (nonatomic, retain) NSMutableString *currentNameTopic;

//Video.h //Video.h

@interface Video : NSObject {

    NSInteger videoID; 
    NSString *nameVideo;
    NSString *nameCategory; 
    NSString *nameTopic; 
    NSString *user;
    NSString *date; 
    NSString *description; 
    NSString *urlThumbnail;
    NSString *urlVideo;
}

//Topic.h //Topic.h

@class Video; 

@interface Topic : NSObject {
    NSMutableString *nameTopic; 
    NSInteger topicID; 
    NSMutableArray *videos; 
}

@property (nonatomic, readwrite) NSInteger topicID;
@property (nonatomic, retain) NSMutableArray *videos; 
@property (nonatomic, retain) NSMutableString *nameTopic; 

//Category.h //Category.h

@class Topic, Video; 

@interface Category : NSObject {
    NSMutableString *nameCategory; 
    NSInteger categoryID; 
    NSMutableArray *topics; 
}

@property (nonatomic, retain) NSMutableArray *topics;
@property (nonatomic, readwrite) NSInteger categoryID; 
@property (nonatomic, retain) NSMutableString *nameCategory;

//AppDelegate // AppDelegate

@class NavegaNavController;

@interface TSCTerrassaAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    IBOutlet UITabBarController *rootController; 
    IBOutlet NavegaNavController *navegaNavController; 

    NSMutableArray *categories; 
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *rootController; 
@property (nonatomic, retain) IBOutlet NavegaNavController *navegaNavController; 

@property (nonatomic, retain) NSMutableArray *categories; 

And here is a short sample of XML file: 这是XML文件的简短示例:

<Videos>
<Category id="12"> 
<nameCategory>xxxx</nameCategory>
<Topic id="43"> 
<nameTopic>zzzz</nameTopic> 
<video id="54"> 
<nameVideo>videoest1</nameVideo> 
<user>skiria</user> 
<date>24-11-09</date>
<description>testing videos</description> 
<urlThumbnail>URLTHUMBNAIL</urlThumbnail> <urlVideo>http://bipbop/gear1/prog_index.m3u</urlVideo>
</video>
</Topic>
</Category>
</Videos>

It doesn't look like aTopic.videos is ever alloc'd/init'd. 它看起来不像aTopic.videos曾经被分配/初始化。

Right after you create aTopic in didStartElement, do alloc+init on aTopic.videos. 在didStartElement中创建aTopic之后,立即对aTopic.videos进行alloc + init。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM