在iOS中,当分配给tableView的dataSource和delegate时,是否应该将自己转换为“id”?

时间:2012-08-22 23:37:11

标签: ios uitableview

我只看到代码在做:

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

但它确实在XCode 4.3上发出警告。我们需要施放它并且id是否适合投射? (所以应该如下:)

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

2 个答案:

答案 0 :(得分:3)

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

问题是你试图通过强制转换为(id)隐藏我们的真实对象类型来欺骗你的方式,使其不符合协议。这是不好的做法,应该避免!表视图期望其delegatedataSource成员实现它将调用的某些方法。 协议(类似于Java中的接口)有助于确保委托实现所有必需的方法,并在您尝试滥用对象时不会实现所有必需的方法或不声明自身支持协议时会发出警告。

要修正你正确的警告,修改你的类接口声明(通常在标题中)看起来像这样:

@interface MyObject : NSObject <UITableViewDelegate, UITableViewDataSource>

&lt;&gt;内的项目声明列表您的类将支持哪些协议。

您可以在此处详细了解协议:https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProtocols.html

答案 1 :(得分:2)

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

在.h文件中,请务必使用您的界面声明添加以下代码。

@interface HomeScreenViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>

然后设置

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

如果要在故事板上创建此控件,则可以始终控制 - 从表视图拖动到文件所有者,然后选择委托和源。 enter image description here