任何人都可以列出委托方法和数据源方法UITableView吗?
委托和数据源方法是否相同UITableView?
我正在尝试以编程方式创建一个包含UITableView的应用程序,该应用程序根据应用程序的Documents目录中的文件生成项目列表.我已经能够将文件读入数组_filepathsArray,但是当我尝试使用数组填充表时,编译崩溃并且Xcode抛出警告.Xcode指出了以下几行的问题:
_tableView.delegate = self;
_tableView.dataSource = _filepathsArray;
Run Code Online (Sandbox Code Playgroud)
这两者都引发了"语义问题".第一次抛出
`Assigning to 'id<UITableViewDataSource>' from incompatible type 'NSArray *__strong'`,
Run Code Online (Sandbox Code Playgroud)
而第二次抛出
`Assigning to 'id<UITableViewDelegate>' from incompatible type 'BrowserViewController *const __strong'`.
Run Code Online (Sandbox Code Playgroud)
如果我删除这些行,应用程序将正确编译(但当然不使用数据填充表),所以我认为问题与这些有关.
我是Objective C和Xcode的初学者,所以我无法弄清楚我在这里做错了什么.谢谢您的帮助.
UPDATE
我已经改变了这条线_tableView.dataSource = _filepathsArray;,_tableView.dataSource = self;正如下面的几个答案所解释的那样.现在,两行都抛出相同的错误:
`Assigning to 'id<UITableViewDelegate>' from incompatible type 'BrowserViewController *const __strong'`.
Run Code Online (Sandbox Code Playgroud)
这个错误可能是视图控制器配置方式的结果吗?在头文件中,它被定义为UIViewController
@interface BrowserViewController : UIViewController
Run Code Online (Sandbox Code Playgroud)
然后我将UITableView包含为子视图.
我在测验中发现一个问题是" 哪个UIKit协议包含方法-tableView:heightForRowAtIndexPath:? "
在没有任何负载的情况下,我想到的协议是UITableViewDataSource.但是当我检查苹果开发者文档时,我发现我错了.UITableViewDelegate是包含该方法的协议.
在此之前,我了解到这些高度方法是数据源协议的一部分.
是否有任何特定原因将它们放在UITableViewDelegate而不是UITableViewDataSource?
为什么跟随函数放在UITableViewDelegate中
以及为什么以下函数放在UITableViewDataSource中
在此之前我认为这些是相似类型的功能,因此这些方法必须放在相同的协议中.
请告诉我这个问题.
提前致谢