uitableviewdatasource ios xcode uitableview delegates

ios - uitableviewdatasource - tableView: numberOfRowsInSection:]: selector no reconocido enviado a la instancia



xcode delegates (8)

¡Lea lo que el mensaje de error le está diciendo!

Has implementado numberOfRowsInSection: ¿Y qué? Ese es el método equivocado. Es irrelevante. Nunca será llamado.

El método que necesita implementar se llama tableView:numberOfRowsInSection: Eso es completamente diferente.

Tengo un extraño problema. Me sale este error:

-[FourSquareCheckInViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x7aecc0 2012-09-14 19:18:39.039 [5869:707] *** Terminating app due to uncaught exception ''NSInvalidArgumentException'', reason: ''-[FourSquareCheckInViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x7aecc0'' *** First throw call stack: (0x3545e88f 0x37805259 0x35461a9b 0x35460a83 0x353bb650 0x32ee3693 0x32ee49ed 0x32ee493f 0x32ee451b 0x32ef17df 0x32ef16af 0x32e95f37 0x353bd1fb 0x3228daa5 0x3228d6bd 0x32291843 0x3229157f 0x322894b9 0x35432b1b 0x35430d57 0x354310b1 0x353b44a5 0x353b436d 0x37050439 0x32ec0cd5 0xb7ebb 0xb7e60) terminate called throwing an exception(lldb)

Bien, me aseguré de que ViewController esté configurado como dataSource y Delegate. He añadido el UITableViewDelegate y el UITableViewDataSource a las cosas <>.

He establecido tableView.delegate = self y tableView.dataSource = self en mi método viewDidLoad.

Aquí está mi implementación de los métodos viewDidLoad y viewDidAppear:

- (void)viewWillAppear:(BOOL)animated{ locationManager = [[CLLocationManager alloc] init]; locationManager.delegate = self; locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move locationManager.desiredAccuracy = kCLLocationAccuracyKilometer; // 1km [locationManager startUpdatingLocation]; locationLat = [locationManager location].coordinate.latitude; locationLng = [locationManager location].coordinate.longitude; [locationManager stopUpdatingLocation]; // 1 CLLocationCoordinate2D zoomLocation; zoomLocation.latitude = locationLat; zoomLocation.longitude= locationLng; // 2 MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, 0.5*METERS_PER_MILE, 0.5*METERS_PER_MILE); // 3 MKCoordinateRegion adjustedRegion = [_mapView regionThatFits:viewRegion]; // 4 [_mapView setRegion:adjustedRegion animated:YES]; } - (void)viewDidLoad { [super viewDidLoad]; _tableView.delegate = self; _tableView.dataSource = self; // Do any additional setup after loading the view. // 1 MKCoordinateRegion mapRegion = [_mapView region]; CLLocationCoordinate2D centerLocation = mapRegion.center; locationManager = [[CLLocationManager alloc] init]; locationManager.delegate = self; locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move locationManager.desiredAccuracy = kCLLocationAccuracyKilometer; // 1km [locationManager startUpdatingLocation]; locationLat = [locationManager location].coordinate.latitude; locationLng = [locationManager location].coordinate.longitude; [locationManager stopUpdatingLocation]; }

Aquí está mi cuerpo de método para numberOfRowsInSection:

- (NSInteger)numberOfRowsInSection:(NSInteger)section{ return 5; }

Aquí está mi archivo de encabezado para el controlador de vista:

#import <UIKit/UIKit.h> #import <MapKit/MapKit.h> #define METERS_PER_MILE 1609.344 @interface FourSquareCheckInViewController : UIViewController <UITableViewDelegate, UITableViewDataSource, CLLocationManagerDelegate, MKMapViewDelegate>{ } @property (weak, nonatomic) IBOutlet MKMapView *_mapView; - (NSInteger)numberOfRowsInSection:(NSInteger)section; @property (weak, nonatomic) IBOutlet UITableView *_tableView; @end

Aquí hay una captura de pantalla que muestra cómo se conecta mi tableView:


Compruebe si tiene UITableViewDelegate, UITableViewDataSource definido en su archivo de clase:

class ClassName: UIViewController, UITableViewDelegate, UITableViewDataSource { }


Es muy simple, tenía un problema similar. Estoy implementando mi TableView sin Storyboard en mi ViewController que ha subclasificado UIViewController con dos protocolos: <UITableViewDataSource, UITableViewDelegate>

Pero si observa el UITableViewDataSource hay dos métodos que se @required y estos debe implementar en su código:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

Todos los demás métodos en UITableViewDelegate son @optional por lo que no es necesario implementarlos.


Si ha configurado todo correctamente y todavía recibe este error. Deberá asignar un controlador a su clase personalizada


También verá este error si, aunque haya conectado todo correctamente en el controlador de vista, ha olvidado asignar su clase de controlador de vista personalizada en su guión gráfico:


También verá este error si, aunque haya conectado todo correctamente en el controlador de vista, ha olvidado extender UITableViewDelegate, UITableViewDataSource.


Si hace clic en la vista, debería mostrar las conexiones anteriores en INSPECTOR. Si no tiene conectado el ViewController, recibirá el error:

''NSInvalidArgumentException'', razón: ''- [UIView tableView: numberOfRowsInSection:]: selector no reconocido enviado a la instancia

Como detuve el error eres tu

  1. presione sobre el controlador de vista para seleccionarlo
  2. busque Referencias de referencia en el inspector de conexiones a la derecha
  3. Arrastre desde el círculo de la Nueva salida de referencia a la vista
  4. cuando suelte el mouse, se mostrará una pequeña ventana emergente: seleccione la fuente de datos
  5. repite el paso 3, y esta vez selecciona delegado

Cuando haya terminado, debe verse como la imagen de abajo!

Esto detuvo el error anterior para mí. Espero que esto ayude a alguien.


- (NSInteger)numberOfRowsInSection:(NSInteger)section;

No está implementando el método UITableViewDataSource. Retire la declaración y no se estrellará más. O alternativamente proporcionar un cuerpo de método para ello.