0

tableViewController に次のコードがあります。cellForRowAtIndexPath が呼び出されていません。どうしてか分かりません。手伝ってくれますか?

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Uncomment the following line to preserve selection between presentations.
    // self.clearsSelectionOnViewWillAppear = NO;

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;


    NSURL *rssURL =[[NSURL alloc] initWithString:@"http://www.myfeedsite.com/feed"];

    NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:rssURL];
    [parser setDelegate:self];

    [parser parse];



}
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    if(elementName)
    {
        self.currentElement = elementName;
    }

}

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    self.currentElement=nil;

}

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    if (!self.currentElement) return;

    if([self.currentElement isEqualToString:@"title"])
    {
        //NSLog(@"%@",string);

        [self.feeds addObject:string];
    }

}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
}

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

#pragma mark - Table view data source

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.feeds count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    // Configure the cell...

    NSLog(@"%@",[self.feeds objectAtIndex:indexPath.row]);

    cell.textLabel.text = [self.feeds objectAtIndex:indexPath.row];

    return cell;
}
4

1 に答える 1

1

ほとんどの場合、パーサーが完了したら、tableViewにデータを再ロードするように指示する必要があります。

- (void)parserDidEndDocument:(NSXMLParser *)parser {
    [tableView reloadData];
}

しかし、話にはもう少しあります。title解析コードは、 XML要素の完全なコンテンツを常に取得するとは限りません。次のようなクラスのNSMutableStringプロパティを作成してcurrentTitleから、コードを変更する必要があります。

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    self.currentElement = elementName;
    if([self.currentElement isEqualToString:@"title"])
    {
        self.currentTitle = [NSMutableString string];
    }

}

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if([self.currentElement isEqualToString:@"title"])
    {
        //NSLog(@"%@",string);

        [self.feeds addObject:currentTitle];
    }

        self.currentTitle=nil;
    self.currentElement=nil;
}

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    if (!self.currentElement) return;

    if([self.currentElement isEqualToString:@"title"])
    {
        //NSLog(@"%@",string);

        [currentTitle appendString:string];
    }

}

投稿したばかりのコメントについて:配列が追加するオブジェクトを取得していない場合は、おそらく初期化されていません。viewDidLoadメソッドに次を追加します。

self.feeds = [NSMutableArray array];
于 2012-05-30T16:15:54.983 に答える