iOS和Xcode:在UITableView中设置委托和数据源时出现不兼容的类型错误

木川 *_* 炎星 2 xcode incompatibletypeerror uitableview ios

我正在尝试以编程方式创建一个包含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包含为子视图.

san*_*san 9

您应该声明一个UITableViewDataSource,它是一个实现该协议并向您的表提供数据的对象.

_tableView.dataSource = self;
Run Code Online (Sandbox Code Playgroud)

来自Apple Docs

dataSource
The object that acts as the data source of the receiving table view.
@property(nonatomic, assign) id<UITableViewDataSource> dataSource
Discussion
The data source must adopt the UITableViewDataSource protocol. The data source is not retained.
Run Code Online (Sandbox Code Playgroud)

更新:请按照我在答案中的第一行定义您的课程,如下所示UITableViewDataSource:

@interface BrowserViewController : UIViewController <UITableViewDataSource,UITableViewDelegate>
Run Code Online (Sandbox Code Playgroud)