J'ai un problème étrange. Je reçois cette erreur:
-[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)
Ok, je me suis assuré que ViewController est défini comme source de données et délégué. J'ai ajouté UITableViewDelegate et UITableViewDataSource aux <> objets.
J'ai défini tableView.delegate = self et tableView.dataSource = self dans ma méthode viewDidLoad.
Voici mon implémentation des méthodes viewDidLoad et 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];
}
Voici le corps de ma méthode pour numberOfRowsInSection:
- (NSInteger)numberOfRowsInSection:(NSInteger)section{
return 5;
}
Voici mon fichier d'en-tête pour le contrôleur de vue:
#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
Voici une capture d'écran montrant comment ma tableView est connectée:
Lisez ce que le message d'erreur vous dit!
Vous avez implémenté numberOfRowsInSection:
. Et alors? C'est la mauvaise méthode. Ce n'est pas pertinent. Il ne sera jamais appelé.
La méthode que vous devez implémenter s'appelle tableView:numberOfRowsInSection:
. C'est complètement différent.
Si vous cliquez sur la vue, les connexions ci-dessus doivent apparaître dans INSPECTOR . Si vous n'avez pas connecté ViewController, vous obtiendrez le message d'erreur suivant:
'NSInvalidArgumentException', raison: '- [UIView tableView: numberOfRowsInSection:]: sélecteur non reconnu envoyé à exemple
Comment j'ai arrêté l'erreur c'est toi
Une fois terminé, il devrait ressembler à l'image ci-dessous!
Cela a arrêté l'erreur ci-dessus pour moi . J'espère que cela aidera quelqu'un.
Vous verrez également cette erreur si, bien que vous ayez tout connecté correctement dans le contrôleur de vue, vous avez oublié d'étendre UITableViewDelegate, UITableViewDataSource.
Vérifiez si vous avez défini UITableViewDelegate, UITableViewDataSource dans votre fichier de classe:
class ClassName: UIViewController, UITableViewDelegate, UITableViewDataSource
{
}
- (NSInteger)numberOfRowsInSection:(NSInteger)section;
Vous n'implémentez pas la méthode UITableViewDataSource. Supprimez la déclaration et elle ne plantera plus. Ou encore, fournissez un corps de méthode pour cela.