所以我有一个带有表视图的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'
答案 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