[tableView:numberOfRowsInSection:]:发送到实例的无法识别的选择器

时间:2015-07-27 10:20:09

标签: ios objective-c iphone uitableview

所以我有一个带有表视图的UIViewController。 我这样做没有故事板。

在这个viewController中我有一个HTTPResponse方法,我创建tableview并为其分配委托和数据源。

 - (void)APIDownload:(APIDownload*)request {

CJSONDeserializer *deserializer = [CJSONDeserializer deserializer];
NSError *error = nil;
NSDictionary *data = [deserializer deserializeAsDictionary :request.downloadData error:&error];

if (error) {
    [[iToast makeText:@"serious error"] show];
} else {
    if (data && data[@"status"] && [data[@"status"] isEqual:@"ok"]) {
        self.categoriesArray = data[@"data"];

        self.rootTable = [[UITableView alloc] initWithFrame:self.slideContainer.frame
                                                              style:UITableViewStylePlain];
        self.rootTable.delegate = self;
        self.rootTable.dataSource = self.categoriesArray;

        [self.slideContainer addSubview:self.rootTable];

        [self.rootTable reloadData];
        [self.rootTable setHidden:NO];

    } else {
        [[iToast makeText:[NSString stringWithFormat:@"%@", data[@"data"][@"message"]]] show];
    }
}
}

我已经为uitableviewdelegate和uitableviewdatasource实现了所有四种必要的方法,但仍然得到了

 2015-07-27 12:57:29.073 xxx[10663:602881] -[__NSCFArray tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x7f9e10490ae0
 2015-07-27 12:57:29.077 xxx[10663:602881] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x7f9e10490ae0'

3 个答案:

答案 0 :(得分:5)

你遇到的问题是:

self.rootTable.dataSource = self.categoriesArray;

您将表数据源设置为数组。我相信你想把它设置为自我:

self.rootTable.dataSource = self;

请记住在视图控制器中实现数据源方法。

答案 1 :(得分:0)

代码中的这一行不正确:

self.rootTable.dataSource = self.categoriesArray;

将其更改为:self.rootTable.dataSource = self;

因为UITableView的数据源不能是NSArray,所以它应该是实现UITableView类的dataSource协议的实例。除了在你的.m文件中,用@interface YourClass()替换@interface YourClass()行 希望这能解决问题。

答案 2 :(得分:0)

问题在于:

  

self.rootTable.dataSource = self;

     

而不是

     

self.rootTable.dataSource = self.categoriesArray;

tableview的委托和数据源是委托变量,用于处理定义我们覆盖的某些方法的协议方法。 因此,只能将类对象设置为它们,而不能设置类变量

详细知识:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableView_Class/index.html