我遇到的问题是我有一个标记为:_podAllEntries 的 NSMutableArray,其中包含 url 路径。然后将该数组的内容加载到我的 UITableView 中的一行中。此数组中共有 4 个项目,每个项目在表中应该有一个条目。以下是该应用程序如何工作的更详细说明:
这个 iOS 应用程序使用 NSURL 来使用来自网站的 XML 数据:http: //undignified.podbean.com/feed。从那里我使用 NSXMLParser 解析 XML 并在“enclosure”元素中搜索一个名为“url”的属性。然后将匹配“url”的所有属性添加到一个数组中,然后应该将每个项目加载到 UITableView 中,每个项目位于单独的行中(如前所述,只有一行填充)。
在这一点上,我可能遗漏了一些小东西,如果能向正确的方向轻推或提供任何反馈,将不胜感激。
UnDigParser.h
解析类的头文件:
#import <Foundation/Foundation.h>
@interface UnDigParser : NSXMLParser <NSXMLParserDelegate> {
}
@property (retain) NSMutableArray *links;
@end
UnDigParser.m
解析类的实现:
#import "UnDigParser.h"
@implementation UnDigParser
NSMutableArray *_links;
@synthesize links = _links;
-(void)parserDidStartDocument:(NSXMLParser *)parser{
_links=[[NSMutableArray alloc] init];
}
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([elementName isEqualToString:@"enclosure"]){
NSString *link = [attributeDict objectForKey:@"url"];
if (link){
[_links addObject:link];
}
}
//NSLog(@"%@",_links);
}
-(BOOL)parse{
self.delegate = self;
return [super parse];
}
@end
视图控制器.h
@class WebViewController;
@interface getpodViewController : UITableViewController <UITableViewDataSource>
{
NSMutableArray *_podAllEntries;
NSMutableArray *_allEntries;
WebViewController *_webViewController;
}
@property(retain) NSMutableArray *podAllEntries;
@property(retain) NSMutableArray *allEntries;
@property(retain) WebViewController *webViewController;
@end
视图控制器.m
@implementation getpodViewController
@synthesize podAllEntries = _podAllEntries;
@synthesize allEntries = _allEntries;
@synthesize webViewController = _webViewController;
-(void)addRows
{
//dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSURL *url = [NSURL URLWithString:@"http://undignified.podbean.com/feed"];
UnDigParser *parser = [[UnDigParser alloc] initWithContentsOfURL:url];
[parser parse];
[_podAllEntries insertObject:parser.links atIndex:0];
NSLog(@"%@", _podAllEntries);
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]]
withRowAnimation:UITableViewRowAnimationRight];
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = @"Podcasts";
self.podAllEntries = [[NSMutableArray alloc]init];
[self addRows];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [_podAllEntries count];
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell==nil){
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}
NSString *cellValue = [NSString stringWithFormat:@"%@", _podAllEntries];
cell.textLabel.text = cellValue;
return cell;
}