2012-09-14 49 views
15

我有一個奇怪的問題。我得到這個錯誤:tableView:numberOfRowsInSection:]:無法識別的選擇器發送到實例

-[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) 

好吧,所以我確保ViewController設置爲dataSource和Delegate。我已經將UITableViewDelegate和UITableViewDataSource添加到了這些東西中。

我在我的viewDidLoad方法中設置了tableView.delegate = self和tableView.dataSource = self。

這是我的實施viewDidLoad中和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]; 

} 

這裏是我的numberOfRowsInSection方法體:

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

這裏是視圖控制器我的頭文件:

#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 

下面是顯示我的tableView如何連接的屏幕截圖:

enter image description here

回答

29

閱讀錯誤信息告訴你什麼!

您已執行numberOfRowsInSection:。所以呢?這是錯誤的方法。這是無關緊要的。它永遠不會被調用。

您需要實施的方法稱爲tableView:numberOfRowsInSection:。這完全不同。

+0

我可以有一些這種方法的代碼示例?我無法找到它。 – jimbob

+0

http://developer.apple.com/library/ios/documentation/userexperience/conceptual/TableView_iPhone/CreateConfigureTableView/CreateConfigureTableView.html#//apple_ref/doc/uid/TP40007451-CH6-SW5 – matt

+0

docs:http:// developer .apple.com /庫/ IOS /#文檔/ UIKit的/參考/ UITableViewDataSource_Protocol /參考/的reference.html – matt

0
- (NSInteger)numberOfRowsInSection:(NSInteger)section; 

您還沒有實現UITableViewDataSource方法。刪除聲明,它不會再崩潰。或者爲它提供一個方法體。

+0

我有一個方法體: – jimbob

+0

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

+1

啊,還有那會是有益的投入在原來的問題,你編輯它之前;) – brynbodayle

4

這很簡單,我有類似的問題。我實現我的TableView沒有故事板在我的ViewController已經子類UIViewController有兩個協議:<UITableViewDataSource, UITableViewDelegate>

但如果你看看UITableViewDataSource有兩種方法女巫是@required這些你需要在你的代碼來實現:

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

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

UITableViewDelegate其他所有方法都@optional因此你不需要實現它們。

24

I had delegate and datasource hooked up to the TableView

如果你點擊查看它應該顯示在檢查上述連接。 如果你還沒有得到的ViewController掛鉤,以及你將得到錯誤:

'NSInvalidArgumentException', reason: '-[UIView tableView:numberOfRowsInSection:]: unrecognized selector sent to instance

我如何停止的錯誤是你

  1. 上的ViewController按選擇該
  2. 外觀爲參考插座連接檢查器在右邊
  3. Ne W¯¯引用出口到視圖
  4. 當你鬆開鼠標,一個微小的彈出窗口中將顯示 - 選擇數據源
  5. 重複步驟3,這次選擇代表

完成後,它應該看起來像下面的圖片!

Referencing outlet Datasource and delegate connected to view

此停止上述錯誤我。 我希望這可以幫助某人。

+0

這個偉大的回答顯示瞭如何通過連接** **督察,這是相當於什麼@馬特完成解決問題通過代碼。 – Gonen

9

您還可以看到此錯誤,如果,雖然您在視圖控制器一切都連接正確,你已經忘記了分配您的自定義視圖控制器類在你的故事板:

Enter your custom view controller in identity inspector

+0

這是我的情況的問題 –

相關問題