是否可以在类中拥有一组“超类”对象?

时间:2012-03-29 04:16:57

标签: objective-c iphone xcode ipad

基本上我想编写一个类来解析我的iphone应用程序的XML文档。

这是解析新闻源的解析器的头文件

@interface NewsXML : NSObject<NSXMLParserDelegate>
{
@private
    NSXMLParser *xmlParser;

    NSString *currentElement;
    NSMutableString *currentTitle;
    NSMutableString *currentDate;
    NSMutableString *currentDetail;
    NSMutableString *currentImageURL;
    NSMutableString *currentThumbnailURL;
    NSMutableString *currentAlt;
}

@property (nonatomic, assign) NSObject<NewsXMLDelegate> *delegate;
@property (nonatomic, strong) NSMutableArray *newsItems;
@property (nonatomic, strong) NSURL *url;

- (void)fetch;

@end

有一个数组'newsItems',它在调用方法'fetch'后保存从XML中获取的对象。

但是我想解析的程序中有几种类型的XML文件。每种类型的XML文件都有不同的字段。 (例如:标题,日期,细节等)

我创建了不同的类(例如,NewsItem,FooItem,AbcItem)来保存来自不同XML文件的Items。

我仍然无法弄清楚如何使这个XML Parser类更通用,以便项目的NSMutableArray可以为每种情况保存不同类型的项目(NewsItem,FooItem ..)。现在我需要为每个xml文件编写不同的XML解析器类。

那么如何以更一般的方式做到这一点?

修改

很抱歉不清楚..当解析器解析每个项目时,它将创建一个新对象,如'NewsItem','FooItem'用于保存数据,然后将其添加到数组中。但是,解析器类不应该知道这些类的存在(因为稍后将添加越来越多的项类)。那么这个xml解析器类如何创建正确的对象并将它们正确地添加到数组中呢?有没有办法用项的类初始化解析器类?

1 个答案:

答案 0 :(得分:2)

在阅读你的评论之后,我认为你所想到的是一个很好的课程设计。我认为XML解析器应该简单地以标准方式解析XML并且总是返回相同的东西,并且您的类(例如NewsItem,FooItem等)应该知道如何使用解析的XML创建自己。这更加强大。

我在我制作的几个应用程序中执行此操作。我的NewsItem或FooItem类实现了如下所示的函数:

- (id)initWithXMLData:(NSDictionary *)xmlDataDictionary {
    self.fooVar = [xmlDataDictionary objectForKey@"xmlParsedKey"];
    //And so on for whatever you need to set from the xml data
}

这样,XML解析数据总是相同的(您不会更改XML解析器),如果您需要类以不同方式处理数据,您可以更改类'自己的initWithXMLData函数,而不是更改XML解析器。 XML解析器永远不需要知道任何其他类的存在。