0

我已经为此工作了几个小时,并且已经被难住了。我可能正在做一些导致这个问题的多余或愚蠢的事情,所以我能得到的任何帮助都将不胜感激。

我正在使用 NSURL 拉入一个网站:http ://undignified.podbean.com/feed. 从这里我使用 NSXMLParser 来解析 XML 页面并搜索 elementName “enclosure”。“enclosure”元素包含一个属性“url”,其中包含 Mp3 的 URL。解析部分有效,我能够 NSLog 出数组的内容,并且我已经验证所有可用的 URL 都存在,但我无法将它加载到 UITableView 中,它只是加载为空白。我正在加载解析出的属性值的数组,_podAllEntries 将使用 dispatch_async 中的值登录到控制台,但是当我的 ViewController 的任何其他部分访问此数组时,它是空白的。我认为由于在后台线程上调用了异步,因此可能必须实现某种委托,以便其他方法可以访问该数组中的值?不过,我可能完全错了。

总而言之,我正在尝试连接到 RSS 提要(xml 页面),解析一个名为“url”的属性并收集它的值,然后将 URL 加载到 tableView 中。我的代码在下面列出。如果我对任何事情不清楚或模棱两可,请随时发表评论。

UnDigParser.h - 用于解析http://undignified.podbean.com/feed的类

@interface UnDigParser : NSXMLParser <NSXMLParserDelegate> {
}
@property (retain) NSMutableArray *links;
@end

UnDigParser.h - 实现文件:

#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];
        }
}

}

-(BOOL)parse{
self.delegate = self;
return [super parse];
}

@end

ViewController.h 文件:

@interface getpodViewController : UITableViewController <UITableViewDataSource>{
NSMutableArray *_podAllEntries;
NSMutableArray *_allEntries;
}

@property(retain) NSMutableArray *podAllEntries;
@property(retain) NSMutableArray *allEntries;

@end

ViewController.M 文件:

#import "getpodViewController.h"
#import "PodcastEntry.h"
#import "UnDigParser.h"


@implementation getpodViewController

@synthesize podAllEntries = _podAllEntries;
@synthesize allEntries = _allEntries;

-(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 addObject:parser.links];
    NSLog(@"%@", _podAllEntries);

});

}

- (void)viewDidLoad {
[super viewDidLoad];


self.title = @"Podcasts";
self.podAllEntries = [[[NSMutableArray alloc]init]autorelease];


[self addRows];
for (UnDigParser *entry in _podAllEntries){
    [_allEntries insertObject:entry atIndex:0];
    [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]]
                          withRowAnimation:UITableViewRowAnimationRight];
}
}

- (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 = [_podAllEntries objectAtIndex:indexPath.row];

cell.textLabel.text = cellValue;

return cell;
}

- (void)dealloc {
    [super dealloc];
[_podAllEntries release];
_podAllEntries = nil;
}

@end
4

2 回答 2

0
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

尝试添加这个:)

于 2012-04-12T14:33:48.357 回答
0

该问题实际上与 cellForRowAtIndexPath 方法有关。当试图填充单元格时,我使用了一个普通的 NSString 来对抗一个不允许的 NSMutableArray 对象。修改代码如下:

NSString *cellValue = [NSString stringWithFormat:@"%@", _podAllEntries];

cell.textLabel.text = cellValue;
于 2012-04-13T18:50:39.350 回答