我只看到代码在做:
tableview.delegate = self;
tableview.dataSource = self;
但它确实在 XCode 4.3 上发出警告。我们是否需要转换它并且是id
正确的转换类型?(所以应该如下:)
tableview.delegate = (id) self;
tableview.dataSource = (id) self;
我只看到代码在做:
tableview.delegate = self;
tableview.dataSource = self;
但它确实在 XCode 4.3 上发出警告。我们是否需要转换它并且是id
正确的转换类型?(所以应该如下:)
tableview.delegate = (id) self;
tableview.dataSource = (id) self;
id
简短的回答:如果您的代码设置正确,您不应该强制转换为直接分配应该没问题。
问题是您试图通过强制转换为(id)
. 这是不好的做法,应该避免!表视图期望其delegate
和dataSource
成员都实现它将调用的某些方法。协议(类似于 Java 中的接口)有助于确保委托实现所有必需的方法,并在您尝试滥用对象时抛出警告,该对象未实现所有必需的方法或未声明自己支持协议。
要正确修复您遇到的警告,请将您的类接口声明(通常在标题中)修改为如下所示:
@interface MyObject : NSObject <UITableViewDelegate, UITableViewDataSource>
<> 中的项目声明了您的类将支持哪些协议的列表。
您可以在此处阅读有关协议的更多信息:https ://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProtocols.html
您面临的最可能的问题可能是您没有扩展 tableview 所需的协议。
在您的 .h 文件中,请务必在您的接口声明中添加以下代码。
@interface HomeScreenViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
然后设置
yourTableName.delegate =self;
yourTableName.dataSource=self;
如果您在情节提要上创建此控件,您始终可以从表格视图控制并拖动到文件所有者并选择委托和源。