tableView dequeueReusableCellWithIdentifier ERROR

时间:2014-09-07 05:59:33

标签: objective-c xcode tableview sigabrt tableviewcell

您好我正在关注本网站的教程。 http://www.appcoda.com/ios-programming-rss-reader-tutorial/

一旦完成,我运行它,我得到一个线程1:信号SIGABRT。

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

我在上面的这一行得到了错误。

这是我的完整代码,不是我的,但他们是拥有该网站的人。

主文件

//
//  APPMaster.m
//  fcffv
//
//  Created by Ajay Venkat on 7/09/2014.
//  Copyright (c) 2014 AJTech. All rights reserved.
//

#import "APPMaster.h"
#import "APPDetail.h"
@interface APPMaster () {

    NSXMLParser *parser;
    NSMutableArray *feeds;
    NSMutableDictionary *item;
    NSMutableString *title;
    NSMutableString *link;
    NSString *element;

}
@end
@implementation APPMaster
- (void)viewDidLoad {

    [super viewDidLoad];

    feeds = [[NSMutableArray alloc] init];
    NSURL *url = [NSURL URLWithString:@"http://images.apple.com/main/rss/hotnews/hotnews.rss"];
    parser = [[NSXMLParser alloc] initWithContentsOfURL:url];

    [parser setDelegate:self];
    [parser setShouldResolveExternalEntities:NO];
    [parser parse];

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

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    cell.textLabel.text = [[feeds objectAtIndex:indexPath.row] objectForKey: @"title"];
    return cell;
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {

    element = elementName;

    if ([element isEqualToString:@"item"]) {

        item    = [[NSMutableDictionary alloc] init];
        title   = [[NSMutableString alloc] init];
        link    = [[NSMutableString alloc] init];

    }

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

    if ([element isEqualToString:@"title"]) {
        [title appendString:string];
    } else if ([element isEqualToString:@"link"]) {
        [link appendString:string];
    }

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

    if ([elementName isEqualToString:@"item"]) {

        [item setObject:title forKey:@"title"];
        [item setObject:link forKey:@"link"];

        [feeds addObject:[item copy]];

    }

}
- (void)parserDidEndDocument:(NSXMLParser *)parser {

    [self.tableView reloadData];

}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([[segue identifier] isEqualToString:@"showDetail"]) {

        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        NSString *string = [feeds[indexPath.row] objectForKey: @"link"];
        [[segue destinationViewController] setUrl:string];

    }
}
@end

标头文件

//
//  APPMaster.h
//  fcffv
//
//  Created by Ajay Venkat on 7/09/2014.
//  Copyright (c) 2014 AJTech. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface APPMaster : UITableViewController <NSXMLParserDelegate>
@property (strong, nonatomic) IBOutlet UITableView *tableView;

@end

希望你能提供帮助。 感谢。

如果你真的有足够的时间在这里是完整的项目

https://www.mediafire.com/?ebajcg33gkl2jf3

由于

2 个答案:

答案 0 :(得分:2)

我将你的代码复制并粘贴到一个Xcode文件中,结果很好......有些东西你应该仔细检查一下......

  1. 您是否将故事板中原型单元格的单元格标识符设置为“单元格”?
  2. Xcode在目标viewController上的setUrl(你应该把它改成setURL)方法给我一个错误,所以我把它评论出来并且它工作正常。
  3. 希望这会有所帮助...

答案 1 :(得分:0)

我通过添加静态NSString来解决这个问题。

static NSString *CellIdentifier = @"Cell";

这是在“.m”文件

中实施之前
   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

这就是我改变了,是的。就像user3192218说的那样,我改变了标识符以匹配故事板并且它有效。