我正忙着制作一个从.plist中加载一堆名字的应用。我已将其设置为将.plist加载到UiTableView中。现在的问题是,每当我尝试打开包含表中包含名称的表的菜单时,我都会收到错误代码。
这是错误消息:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x7fc748e37ea0'
这是我的viewController.m
#import "ViewController.h"
#import "Stuff.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
Stuff *s = [[Stuff alloc] init];
[s getStuff];
self.items = [[NSMutableArray alloc] initWithArray:s.stuff];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.items count];
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath*)indexPath
{
NSString *id = @"plistdata";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:id forIndexPath:indexPath];
if(cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:id];
}
cell.textLabel.text = self.items[indexPath.row];
return cell;
}
@end
谢谢!
答案 0 :(得分:4)
以Matt所说的为基础:你得到的错误说UIViewController类(所有视图控制器的基类)都不能识别消息tableView:numberOfRowsInSection:
不知何故,当您创建视图控制器时,您需要创建一个通用的UIViewController对象,而不是自定义ViewController类的实例。
原因取决于您创建视图控制器的方式。
如果使用调用-[UIViewController initWithNibName:bundle:]
的代码创建它,您可能正在创建UIViewController的实例而不是自定义的ViewController类:
ViewController *myVC = [[UIViewController alloc] initWithNibName: @ViewController"
bundle: nil];
如果您使用情节提要板创建它,则可能错误地配置了故事板。
为了帮助您弄清楚为什么要获得通用的UIViewController而不是自定义类,您需要告诉我们您是如何创建自定义视图控制器的实例的。
答案 1 :(得分:1)
问题是您所显示的代码永远不会被调用,因为您显示的视图控制器(ViewController)不是表视图的数据源/委托。数据源/委托消息正被发送到某些其他视图控制器。 (这可能是因为故事板配置错误,但您没有提供足够的信息以确保这一点。)
答案 2 :(得分:0)
验证接口构建器中的File's Owner对象是否设置为您正在实现的UITableViewController子类的实例。还要确保tableView出口链接到表视图。
.h文件
@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDataSource>
@property (weak, nonatomic) IBOutlet UITableView *tableView;
@end
故事板设置
属性检查员:
Connections Inspector: