0

我只看到代码在做:

tableview.delegate = self;
tableview.dataSource = self;

但它确实在 XCode 4.3 上发出警告。我们是否需要转换它并且是id正确的转换类型?(所以应该如下:)

tableview.delegate = (id) self;
tableview.dataSource = (id) self;
4

2 回答 2

3

id简短的回答:如果您的代码设置正确,您不应该强制转换为直接分配应该没问题。

问题是您试图通过强制转换为(id). 这是不好的做法,应该避免!表视图期望其delegatedataSource成员都实现它将调用的某些方法。协议(类似于 Java 中的接口)有助于确保委托实现所有必需的方法,并在您尝试滥用对象时抛出警告,该对象未实现所有必需的方法或未声明自己支持协议。

要正确修复您遇到的警告,请将您的类接口声明(通常在标题中)修改为如下所示:

@interface MyObject : NSObject <UITableViewDelegate, UITableViewDataSource>

<> 中的项目声明了您的类将支持哪些协议的列表。

您可以在此处阅读有关协议的更多信息:https ://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProtocols.html

于 2012-08-22T23:50:49.767 回答
2

您面临的最可能的问题可能是您没有扩展 tableview 所需的协议。

在您的 .h 文件中,请务必在您的接口声明中添加以下代码。

@interface HomeScreenViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>

然后设置

yourTableName.delegate =self;
yourTableName.dataSource=self;

如果您在情节提要上创建此控件,您始终可以从表格视图控制并拖动到文件所有者并选择委托和源。 在此处输入图像描述

于 2012-08-22T23:50:03.260 回答