2014-11-24 2 views
0

Я занят созданием приложения, которое загружает кучу имен из .plist. Я настроил его так, чтобы .plist загрузился в UiTableView. Теперь проблема в том, что я получаю код ошибки, когда я пытаюсь открыть меню с таблицей с именами в ней.- [UIViewController tableView: numberOfRowsInSection:]: непризнанный селектор, отправленный в экземпляр 0x7fc748e37ea0 '

Это сообщение об ошибке:

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

@ARE, можете ли вы поделиться тем, что находится в 'ViewController.h'? – Popeye

+0

@ Попай, правда, плохо. Я просто сделал двойную проверку в своем комментарии .. – NorthBlast

+0

@NorthBlast достаточно справедливо Я также удалю свои комментарии – Popeye

ответ

0

Проблема заключается в том, что код, который вы указали, никогда не вызывается, потому что указанный вами контроллер просмотра (ViewController) не является источником данных/делегатом представления табличного представления. Сообщения источника данных/делегата отправляются в некоторый другой контроллер отображения. (Возможно, потому, что раскадровка неправильно сконфигурирована, но вы не дали мне достаточной информации, чтобы я был в этом уверен.)

0

Проверьте, что объект Owner Owner File в построителе интерфейса установлен как экземпляр подкласса UITableViewController что вы реализуете. Также убедитесь, что выход tableView связан с табличным представлением.

.h файл

@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDataSource> 
@property (weak, nonatomic) IBOutlet UITableView *tableView; 
@end 

Раскадровка Установка

Атрибуты Инспектор:

enter image description here

Connections Inspector:

enter image description here

3

Чтобы построить на том, что сказал Мэтт: ошибка вы получаете говорит, что класс UIViewController (базовый класс для всех контроллеров зрения) не распознает сообщение Tableview: numberOfRowsInSection:

Так или иначе, когда вы создаете контроллер представлений вы создаете общий объект UIViewController вместо экземпляра вашего настраиваемого класса ViewController.

Причина этого зависит от того, как вы создаете свой контроллер вида.

Если вы создаете его с помощью кода с вызовом -[UIViewController initWithNibName:bundle:], вы можете создать экземпляр UIViewController, а не пользовательский класс ViewController:

ViewController *myVC = [[UIViewController alloc] initWithNibName: @ViewController" 
    bundle: nil]; 

Если вы создаете его с помощью раскадровки, вы можете неправильно настроена раскадровка.

Чтобы помочь вам понять, почему вы получаете общий UIViewController вместо своего пользовательского класса, вам нужно сообщить нам, как вы создаете экземпляр своего настраиваемого контроллера представлений.

Смежные вопросы