ios numberOfRowsInSection - 无法识别的选择器发送到实例问题

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/6202715/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-30 20:10:47  来源:igfitidea点击:

numberOfRowsInSection - unrecognized selector sent to instance issue

iphoneobjective-cxcodeiosxcode4

提问by Brian H.

I keep getting this issue while trying to run my application. It compiles successfully:

我在尝试运行我的应用程序时不断遇到这个问题。它编译成功:

    GNU gdb 6.3.50-20050815 (Apple version gdb-1518) (Thu Jan 27 08:30:35 UTC 2011)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-apple-darwin".Attaching to process 1833.
2011-06-01 10:20:07.576 MicroBetas[1833:207] -[UIApplication tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x4d0f9e0
2011-06-01 10:20:07.580 MicroBetas[1833:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIApplication tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x4d0f9e0'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x00ecbbe9 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x00cc05c2 objc_exception_throw + 47
    2   CoreFoundation                      0x00ecd6fb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
    3   CoreFoundation                      0x00e3d366 ___forwarding___ + 966
    4   CoreFoundation                      0x00e3cf22 _CF_forwarding_prep_0 + 50
    5   UIKit                               0x001cff16 -[UISectionRowData refreshWithSection:tableView:tableViewRowData:] + 1834
    6   UIKit                               0x001cd9e7 -[UITableViewRowData numberOfRows] + 108
    7   UIKit                               0x000848c2 -[UITableView noteNumberOfRowsChanged] + 132
    8   UIKit                               0x000912b8 -[UITableView reloadData] + 773
    9   UIKit                               0x0008e470 -[UITableView layoutSubviews] + 42
    10  QuartzCore                          0x01612451 -[CALayer layoutSublayers] + 181
    11  QuartzCore                          0x0161217c CALayerLayoutIfNeeded + 220
    12  QuartzCore                          0x0160b37c _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 310
    13  QuartzCore                          0x0160b0d0 _ZN2CA11Transaction6commitEv + 292
    14  UIKit                               0x0001a19f -[UIApplication _reportAppLaunchFinished] + 39
    15  UIKit                               0x0001a659 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 690
    16  UIKit                               0x00024db2 -[UIApplication handleEvent:withNewEvent:] + 1533
    17  UIKit                               0x0001d202 -[UIApplication sendEvent:] + 71
    18  UIKit                               0x00022732 _UIApplicationHandleEvent + 7576
    19  GraphicsServices                    0x01021a36 PurpleEventCallback + 1550
    20  CoreFoundation                      0x00ead064 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
    21  CoreFoundation                      0x00e0d6f7 __CFRunLoopDoSource1 + 215
    22  CoreFoundation                      0x00e0a983 __CFRunLoopRun + 979
    23  CoreFoundation                      0x00e0a240 CFRunLoopRunSpecific + 208
    24  CoreFoundation                      0x00e0a161 CFRunLoopRunInMode + 97
    25  UIKit                               0x00019fa8 -[UIApplication _run] + 636
    26  UIKit                               0x0002642e UIApplicationMain + 1160
    27  MicroBetas                          0x00002299 main + 121
    28  MicroBetas                          0x00002215 start + 53
)
terminate called after throwing an instance of 'NSException'
sharedlibrary apply-load-rules all
Current language:  auto; currently objective-c
(gdb) 

Code it appears to be getting stuck at:

代码似乎卡在了:

- (NSInteger)tableView:(UITableView *)tableView 
 numberOfRowsInSection:(NSInteger)section {
    return [self.colorNames count];
}

回答by Jhaliya

The class instance, which you have assign to DataSourcedoesn't implement the UITableViewDataSourcefunctions.

您分配给的类实例DataSource没有实现这些UITableViewDataSource功能。

 @interface MyClassController :UIViewController <UITableViewDelegate,UITableViewDataSource>

try like below.

尝试如下。

myTableView.dataSource = self;

*Note selfis the instance of MyClassController

*注self是实例MyClassController

implement the method of UITableViewDataSourceprotocol.

实现UITableViewDataSource协议的方法。

回答by Deepak Danduprolu

It's highly likely that you intended your application delegate to be your data source but accidentally made the File's Owner, which is the UIApplicationobject, the datasource. This is the reason the application object seems to be getting the data requests.

您很可能希望您的应用程序委托成为您的数据源,但不小心将File's Owner,即UIApplication对象,数据源。这就是应用程序对象似乎正在获取数据请求的原因。

回答by Muhammad Irfan

enter image description here

在此处输入图片说明

Check your data source and delegate outlet are properly connected to your viewController... This worked for me..

检查您的数据源和委托插座是否正确连接到您的 viewController ......这对我有用..

回答by abriggs

The problem is most likely caused by assigning the File's Owner as the Table View's delegate and data source. As others have mentioned, the File's Owner is a UIApplication object which does not conform to the UITableViewDelegate and UITableViewDataSource protocols that the UITableView must conform to. If you are using IB, simply connect the Table Viewto it's respected View Controllerfor both the delegate and data source instead of the File's Owner.

问题很可能是由于将文件的所有者分配为表视图的委托和数据源引起的。正如其他人提到的,文件的所有者是一个 UIApplication 对象,它不符合 UITableView 必须符合的 UITableViewDelegate 和 UITableViewDataSource 协议。如果您正在使用IB,只需将 连接Table View到它受View Controller委托和数据源而不是文件所有者的尊重。

回答by Envil

I have just faced this problem, and I think in some cases this problem is because of new XCode bug.
-I delete the table view object in the xib file.
-Recreate it then connect the datasource and delegate to the File's Owner.
-Cleaning the project then run again, it works without any error.

我刚刚遇到这个问题,我认为在某些情况下这个问题是因为新的 XCode 错误。
-我删除了xib文件中的表视图对象。
- 重新创建它然后连接数据源并委托给文件的所有者。
- 清理项目然后再次运行,它没有任何错误。

回答by UIResponder

I simply deleted the tableView's connection in XIB and deleted the tableView and recreated it.

我只是删除了XIB中tableView的连接并删除了tableView并重新创建了它。

Worked.

工作了。

Thanks @ENVIL

谢谢@ENVIL