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

8

在运行我的应用程序时,我一直遇到这个问题。它可以成功编译:

    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) 

代码似乎在以下位置卡住了:

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

什么是tableView?请展示相关代码。 - MByD
代码似乎卡在这里了:- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [self.colorNames count]; } - Brian H.
请提供需要翻译的具体内容。 - MByD
"[UIApplication tableView:numberOfRowsInSection:]: unrecognized selector" -- 这就是问题所在。您正在使用UIApplication对象作为TableView数据源,但它不知道如何处理。 (您提供了错误的数据源指针,因此列出的代码永远不会被调用。) - Hot Licks
6个回答

31

你所赋值给DataSource的类实例并没有实现UITableViewDataSource函数。

 @interface MyClassController :UIViewController <UITableViewDelegate,UITableViewDataSource>

尝试像下面这样。

myTableView.dataSource = self;

*注意selfMyClassController类的实例。

实现UITableViewDataSource协议的方法。


好的,实际上它起作用了。非常感谢。但我在想:这个代码实现的解决方案可能应该做与在Storyboard中设置dataSource和delegate相同的事情,不是吗? - Artem Zaytsev

12

很有可能您本意是让应用程序委托成为数据源,但不小心将文件所有者(File's Owner)(即UIApplication对象)设置为数据源。这就是应用程序对象似乎获取数据请求的原因。


我已经这样做了,但是我是新手,正在按照这个教程进行操作,该教程建议这样做,所以我不知道如何继续。链接 - Brian H.
选择 File's Owner 并在右侧检查 Identity Inspector。那里的类名是什么? - Deepak Danduprolu
类名为UIApplication。 - Brian H.
我认为在创建项目时,您选择了“基于窗口的应用程序”而不是“基于视图的应用程序”。您可以考虑重新开始。 - Deepak Danduprolu
好的,非常感谢您的所有帮助。非常感激。 - Brian H.
这对我有用。我在我的故事板中将委托/数据源设置为第一响应者而不是控制器。在那里更改为使用控制器修复了此错误。 - AdamFortuna

7

在此输入图片描述

请检查您的数据源和委托输出是否正确连接到您的视图控制器... 对我有用...


谢谢你,这解决了一个调试了数小时的问题。 - Mina

3

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


0

我刚刚遇到了这个问题,我认为在某些情况下,这个问题是由于新的XCode bug引起的。
-我在xib文件中删除了表格视图对象。
-重新创建它,然后将数据源和委托连接到文件所有者。
-清理项目,然后再次运行,就可以正常工作了,没有任何错误。


0

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

成功了。

谢谢@ENVIL


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接